如何对 YAML 文件进行排序?

2024-01-05

我一直在尝试使用 Ruby 对 i18n 翻译 YAML 文件进行排序,这样我就可以以更好、更有组织的方式管理新翻译,但我一直想知道是否有什么东西可以简化这项任务。

我找到了一个 YAML 文件编写器,这样我就可以将哈希值写入文件中,但我的问题是如何正确对哈希值进行排序。如果我得到哈希h, h.sort返回一个数组,但我仍然没有找到一个简单的方法来做到这一点。

我有这样的 YAML 文件:

pt-br:    
  global:
    misc:
      total: "Total"
      all: "Todos"
      close: "Fechar"
      cancel: "Cancelar"

    crud:
      access: "Acessar"
      back: "Voltar"
      edit: "Editar"
      confirm: "Confirmar"
      send: "Enviar"

...

(文件比这个大得多)

但我想这样对它们进行排序:

pt-br:    
  global:
    crud:
      access: "Acessar"
      back: "Voltar"
      confirm: "Confirmar"
      edit: "Editar"
      send: "Enviar"

    misc:
      all: "Todos"
      cancel: "Cancelar"
      close: "Fechar"          
      total: "Total"

我认为一些简单的递归方法可以帮助我这样:

def translation_sort(h)
  if h.class == Hash
    h = h.sort
    h.each{|item| translation_sort(item)}
  end
  h
end

require "yaml"
h=YAML.load_file(File.open("~/pt-br.sample.yml"))
translation_sort(h)

在我需要对哈希进行深度排序的用例中,哈希始终是一棵树,其中键是标签,值是(子)树(如果是哈希)或叶子(否则)。我只需要对树的标签(而不是值)进行深度排序。

我懂了

before: {"a":[2,10,{"5":null,"1":null,"3":null}],"x":{"5":null,"1":null,"3":null},"a2":{"5":[2,10,5],"1":null,"3":null}}
after:  {"a":[2,10,{"5":null,"1":null,"3":null}],"a2":{"1":null,"3":null,"5":[2,10,5]},"x":{"1":null,"3":null,"5":null}}

有了这个

    def deeply_sort_hash(object)
      return object unless object.is_a?(Hash)
      hash = Hash.new
      object.each { |k, v| hash[k] = deeply_sort_hash(v) }
      sorted = hash.sort { |a, b| a[0].to_s <=> b[0].to_s }
      hash.class[sorted]
    end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对 YAML 文件进行排序? 的相关文章

  • to_proc 方法在 Ruby 中意味着什么?

    我正在学习 Rails 并关注这个线程 https stackoverflow com questions 1961030 我被困住了to proc方法 我认为符号只是字符串的替代品 它们就像字符串 但在内存方面更便宜 如果我还缺少任何其他
  • Ruby 元编程方法列表?

    刚刚开始学习 Ruby 元编程 看看 Object methods 我得到 Object methods gt allocate new superclass freeze lt gt lt lt gt gt to s included m
  • 有没有办法编写一个匹配除文件夹中的文件之外的所有文件的全局模式?

    我需要编写一个文件 glob 它将匹配除特定文件夹中包含的文件之外的所有文件 例如 除了高级文件夹中包含的文件之外的所有文件 foo 我已经到达以下区域 foo 然而 这个 glob 似乎与 Ruby 中的任何文件都不匹配File fnma
  • 根据三列中的值组织行

    导入并获取数据集import numpy as np import matplotlib pyplot as plt import pandas as pd df pd DataFrame DaysExperienceTask 7 8 2
  • Ruby 中 SecureRandom.urlsafe_base64(8) 的碰撞概率?

    我在用SecureRandom urlsafe base64 8 为了在我的系统中创建 URL 安全的唯一 ID 我想知道如何计算碰撞概率 我将大约 10 000 个这些 id 插入到一个数组中 我想避免检查其中一个键是否已经在数组中 但我
  • Ruby 中实现的所有设计模式的备忘单?

    我想知道是否有针对 Ruby 中实现的所有设计模式的备忘单 这样您就不必重新发明轮子 设计模式对于组织大量代码非常有用 因为您不需要像在 verbose algol derivitive language 中那样编写那么多代码来在 ruby
  • Azure Devops Pipeline YAML 中的 Git 标记名称

    Summary 如何获取 Azure Devops Pipeline YAML 文件中当前 git 标签的名称 我想做什么 我正在 Azure Devops 中设置构建管道 创建新的 git 标签时会触发管道 然后我想构建 docker 镜
  • 下一个和上一个文档

    我正在制作一个图片库 每个图像都有一个 id 当我查看图像时 我想要接下来的 3 个图像和之前的 3 个图像 我怎样才能在 mongodb 查询中得到这个 我认为我可以使用 sort by id 因为这是不可排序的 也许使用mapReduc
  • 在所有延迟的作业之前挂钩

    是否可以在所有delayed job任务之前运行一个方法 基本上 我们试图确保每台运行delayed job的服务器都有我们代码的最新实例 因此我们希望运行一个方法来在每个作业运行之前检查这一点 我们已经有了 check 方法并在其他地方使
  • .properties 或 JSP 编码有问题

    我有jsp文件
  • mongoid 中的嵌入文档与哈希数据类型

    我找不到任何讨论此问题的博客文章或文档 它们 嵌入式文档和哈希数据类型 非常相似 彼此相比有何好处或限制 考虑我的架构设计 class HistoryTracker include Mongoid Document include Mong
  • heroku 语言区域设置不工作 I18n::MissingTranslationData

    在我的本地电脑上一切正常 但在 heroku 上我收到错误 我的 Heroku 控制台 PC HOME PC c rails konkurranceportalen master heroku console Ruby console fo
  • 从 Rails Helper 返回多个标签的最佳方法是什么?

    我想创建一个隐藏字段并在一个助手中创建一个链接 然后将两者输出到我的 erb 应该输出结果 link to something a path form hidden field something tableize value gt som
  • 从轨道控制器返回

    这是一个初学者 Rails 问题 我这样做之后 format xml head ok 如何从控制器端点返回而不显示视图 如果我此时放弃函数的末尾 我会得到我所期望的结果 但如果我调用 返回 我最终会进入视图 或者在我的情况下会出现缺少的视图
  • 如何更新 YamlDotNet 中的属性值?

    我正在尝试加载现有的 yaml 文件并更新其一些属性 然而 我正在努力not覆盖其他属性 My yaml A a1 value1 a2 value2 所需的 yaml A a1 value1 a2 modified 我目前有以下代码 但我只
  • 有没有办法在 C 中按多个变量对结构进行排序?

    我必须编写一个对数组中的结构进行排序的函数 结构是 define MAX USERNAME LENGTH 16 typedef struct char username MAX USERNAME LENGTH unsigned int ri
  • Rails 3:用户创建自定义表单?

    我正在尝试思考如何允许用户创建具有所有字段类型的自定义表单 如果有一颗宝石那就太好了 但我似乎无法在任何地方找到它 所以我有一个像这样的数据库设置 t integer form id t string name t string hint
  • 对对象集合进行排序[重复]

    这个问题在这里已经有答案了 如果我有一个简单的字符串列表 List
  • 在 RSpec 测试期间抑制控制台输出

    我正在测试在控制台上放置一些消息的类 包含 put p 警告等 我只是想知道在 RSpec 测试期间是否有能力抑制此输出 我压抑puts通过重定向在我的类中输出 stout到一个文本文件 这样 如果我出于任何原因需要查看输出 它就在那里 但
  • ActiveRecord 查询,按关联排序,最后一个 has_many

    我试图列出所有Users by the created at最近创建的关联记录 通讯 列 到目前为止我所拥有的 User includes communications order communications created at IS

随机推荐

  • Google Apps 脚本附加源代码/安全性

    我正在构建一个 Google Apps 脚本插件 并想知道当我将其发布到 Marketplace 时是否任何人都可以访问底层源代码 我想在代码中存储密码 私钥 并希望确保安装该应用程序的任何人都无法访问它 使用 Google Apps 脚本
  • SQL:SELECT IN 更快且最佳实践?

    如果我使用 2 个查询 第一 查询所需的所有键 ID 第二 select from tab1 where tab1 id in ids list ids 列表可能有数千个 这样做是明智的 最佳的做法还是推荐的做法 作为一般规则 考虑到您对较
  • php7 中删除了 utf8_(en|de) 代码?

    我最近在我的开发服务器上切换到 PHP 7 到目前为止 它运行得很好 自从我更新到PHP 7 0 3 10 deb sury org trusty 1 今天早些时候 utf8 decode and utf8 encode功能不再可用 然而
  • 如何在导航抽屉内创建​​可扩展的listView?

    我需要创建一个导航抽屉 例如 Flipkart 或 Astro 文件管理器应用程序 如何用可扩展的 listView 替换 listView 我需要一个像这样的导航抽屉 这是我的xml
  • Angular 2和纯javascript之间的通信

    我正在构建一个角度应用程序 并且我处于必须与外部 javascript 进行通信的情况 Scenario在应用程序初始化期间 我使用以下命令将两个 iframe 注入到 index html 中 document body appendCh
  • 如何将外部 .js 文件包含到 ejs Node 模板页面

    我找不到将外部 js 文件包含到 Node ejs 模板中的方法 我想将逻辑和数据放入外部 js 文件中的对象中 将该文件包含到 index ejs 模板并从中提取数据 我尝试通过插入标准方式 并且它不起作用 然后我尝试了 ejs 特定关键
  • 自动播放视频 iPhone 低功耗模式不起作用

    我有一个视频 它是我的设计中不可或缺的一部分 并且在低功耗模式下 该视频可以在除 iPhone 之外的所有设备上播放 使用自动播放属性 视频将在大多数浏览器中加载时开始 div class footage div
  • 获取 Github 总克隆统计数据

    有没有办法获取任意给定月份的 github 存储库的克隆统计信息 我们有一个 克隆 选项卡 其中包含过去 14 天的统计数据https help github com articles about repository graphs tra
  • 无法在 Angular 中设置到指定出口的路由

    我有三个命名的路由器插座 如下所示
  • Laravel 4 中如何实现用户权限?

    我基本上想要的是用户权限 我的数据库中有一个名为 帐户 的表 有一个名为 group id 的列 我想在 group id 3 时设置它 然后用户是管理员 然后他可以查看特殊站点 按钮和类似的东西 我尝试过实现类似的东西 public fu
  • Codeigniter 更改视图中获取的日期格式

    我有一个来自数据库的日期值12 12 2015我尝试了下面的代码 date 12 12 2015 echo date M d Y strtotime date 它给出的输出为Dec 12 2015 但我想要December 12 2015作
  • 给定两个排序的间隔列表,返回两个列表之间的重叠间隔

    给你两个间隔列表 A and B In A 间隔按其起点排序 没有任何区间在A重叠 同样 在B 间隔按其起点排序 没有任何区间在B重叠 返回两个列表之间重叠的间隔 Example A 0 4 7 12 B 1 3 5 8 9 11 Retu
  • 在 VS 2010 中将代码逆向工程为 UML 类图

    将源代码逆向工程为 VS 2010 UML 类模型 我有一种不好的预感 VS 2010 不支持这一点 我使用的是 2010 年 2 月的 RC 我尝试将类从 Architecture Explorer 拖到 UML Model Explor
  • “链接库依赖项”链接器选项在 Visual Studio 2010 - 2015 及更高版本中实际执行什么操作?

    到VS2008 你设置你的原生C 解决方案文件中的项目依赖项 Project Dependencies 并且如果 默认情况下 链接器选项 Properties gt Linker gt General Link Library Depend
  • 通过命令行调用 Tortoise Git“显示日志”

    当在 Windows 中通过命令行输入 git 目录时 我想要一个命令行来显示 Tortoisegit 的show log GUI 所以我想避免打开资源管理器 gt 转到文件夹 单击右键 gt 等等 东西 但我还是想要好看的show log
  • Comparison 的 Monoid 实例在哪里定义?

    newtype Comparison a定义于Data Functor Contravariant http hackage haskell org package base 4 12 0 0 docs src Data Functor C
  • MVC:数据模型和视图模型

    我过去读过一些关于模型的 MVC 建议 指出不应为域和视图重用相同的模型对象 但一直找不到愿意讨论的人why这不好 我认为 创建两个单独的模型 一个用于域 一个用于视图 然后在它们之间进行映射会产生大量重复 加上繁琐的映射代码 其中一些可以
  • Web 开发中处理多屏幕分辨率和宽高比的策略

    过去 设计时的屏幕分辨率是 800 x 600 也许是 640 x 480 然后出现了 1024 x 768 等等 但情况变得更糟 现在我们不仅有不同的分辨率 而且还有不同的宽高比 人们使用什么策略来适应当今不断扩大的屏幕尺寸和宽高比范围
  • 使用Python将括号内的数字(字符串)转换为负整数(或浮点数)?

    在Python中 将括号内的数字 字符串 转换为负整数 或浮点数 的最简单方法是什么 例如 4 301 到 4301 这是会计应用程序中常见的情况 最简单的方法是 my str 4 301 num int my str translate
  • 如何对 YAML 文件进行排序?

    我一直在尝试使用 Ruby 对 i18n 翻译 YAML 文件进行排序 这样我就可以以更好 更有组织的方式管理新翻译 但我一直想知道是否有什么东西可以简化这项任务 我找到了一个 YAML 文件编写器 这样我就可以将哈希值写入文件中 但我的问