如何对 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 文件进行排序? 的相关文章

  • 避免在 Ruby 中自动从 Fixnum 转换为 Bignum

    我正在将算法从 C 移植到 Ruby 该算法有一个方法返回一个int有时会溢出 private static int NextRandom int n return 1234567890 n 12345 该算法利用溢出来避免该函数返回的值超
  • 可以在哈希每个循环中访问索引吗?

    我可能遗漏了一些明显的东西 但是有没有办法访问哈希每个循环内迭代的索引 计数 hash three gt one four gt two one gt three hash each key value any way to know wh
  • Ruby 的 OpenSSL::Random 种子是否足够?

    我对 Ruby 知之甚少 所以如果答案很明显 请原谅我 我注意到在http www ruby doc org stdlib 1 9 3 libdoc securerandom rdoc SecureRandom html http www
  • 如何在 PHP 中对数组和数据进行排序?

    这个问题旨在作为有关 PHP 中数组排序问题的参考 人们很容易认为您的特定案例是独特的并且值得提出新问题 但大多数实际上只是此页面上的解决方案之一的微小变化 如果您的问题因与此问题重复而被关闭 请仅在您能解释为什么它与以下所有问题显着不同的
  • Ruby:如何计算相对于另一条路径的路径?

    假设我知道我开始的绝对路径和我试图到达的绝对路径 first first path second second path 现在我想弄清楚如何构建一条相对于第一个路径 例如 answer should be first path second
  • 从 ActiveRecord 获取表名

    I used ActiveRecord Base set table name在动态创建的 ActiveRecord 类上设置我的表名称 现在我需要知道稍后如何获得该值 api 文档没有提及如何执行此操作 另外 我无法从 ActiveRec
  • 标记(lex?parse?)正则表达式

    使用 Ruby 我想获取一个 Regexp 对象 或表示有效正则表达式的字符串 您的选择 并将其标记化 以便我可以操作某些部分 具体来说 我想采用这样的正则表达式 字符串 regex var w parts foo bar 并创建一个替换字
  • 如何让 Sinatra 通过 HTTPS/SSL 工作?

    正如标题所示 谷歌没有提供任何与此相关的有用信息 如何为 Sinatra 应用程序设置和配置 HTTPS SSL 如何创建 HTTPS 路由 我以前从未在我的应用程序中使用过 HTTPS 也没有调整 Rack 其他内容的经验 所以我很欣赏详
  • Python:对这个字典进行排序(字典中的字典)

    d a k 1 b whatever b k 2 b sort by k 想要在 python 中按 k 降序对这个字典进行排序 有点棘手 请帮忙 dicts 是无序的 所以没有办法直接对它们进行排序 但如果你是 愿意转换dict进入 键
  • 如何使用 Ruby 2.7.0 修复 Rails 的警告消息

    有没有人解决这个问题Ruby 2 7 0 I used rbenv并安装了 Ruby v2 7 0 然后使用创建了一个 Rails 项目Rails v6 0 2 1 目前 通过运行之一 rails s rails s u puma rail
  • Python 中的 JSON 到 YAML:如何获得正确的字符串操作?

    我正在使用PyYAML 库 https github com yaml pyyaml将 json 转换为 yaml 但是引号在不应该的情况下从字符串值中删除了 它们只能从钥匙上移除 我已将 default flow style 选项与 ya
  • 方法调用中是否有记忆约定?

    我想避免在方法调用中重新评估值 直到现在 我一直在这样做 def some method some method begin lot s of code end end 但它最终变得非常丑陋 在一些代码中 我看到类似以下内容 def som
  • 在任意时间范围内找到最佳日/月/年间隔的算法?

    如果您有时间表 请说 March 19 2009 July 15 2011 是否有一种算法可以将该时间范围分解为 March 19 2009 March 31 2009 complete days April 1 2009 December
  • 根据用户区域设置过滤字符串列表

    当使用 AngularJS 1 6 处理 JavaScript 项目时 我有一个要过滤的字符串列表 例如 假设我的列表包含 rbol cig e a nido and tubo 当过滤西班牙语字符串时 如果我过滤 u 我会期望两者cig e
  • Github 操作测试之前是否进行了包含特定单词的提交

    我需要确保使用 github 操作进行测试 如果之前已进行包含该单词的提交build 如果提交不包含单词build那么不应运行 github 操作的测试 你能给我一些建议吗 Test name Testing on push branche
  • 使用复选框过滤列表

    我有一个电影列表及其评级 在我的页面顶部 我有一个表单 其中提供了一个复选框列表 其中显示了每个可用的评级 G PG 13 等 一旦用户单击复选框并点击提交 我只想显示所选的电影 在我的索引方法中 我有一个名为的实例变量 filtered
  • 将 ruby​​ 类转换为模块比使用改进更好的方法?

    Module refine http ruby doc org core 2 0 0 Module html method i refine方法接受一个类和一个块并返回一个细化模块 所以我想我可以定义 class Class def inc
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 回滚后是否应该删除迁移

    我对 ruby 和 Rails 相当陌生 刚刚开始了解迁移 我的问题是回滚后删除迁移的最佳实践或正确时间是什么 到目前为止 我读到的内容是回滚后是否删除迁移的观点问题 但是在团队中工作时删除迁移是否有任何重大影响 以及保留迁移文件相对于删除
  • 下载所有 gems 依赖项

    我想通过下载任何所需的文件并将它们带到另一台计算机来安装指南针没有互联网连接 我已经下载了指南针的源包 当我在未连接的计算机上运行 gem 时 它抱怨缺少依赖项 有什么解决办法吗 这正是我遇到的问题 经过一段时间的搜索后 我找到了一个可以使

随机推荐

  • 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 文件编写器 这样我就可以将哈希值写入文件中 但我的问