gpt4 book ai didi

ruby - 如何对 YAML 文件进行排序?

转载 作者:数据小太阳 更新时间:2023-10-29 06:33:09 25 4
gpt4 key购买 nike

我一直在尝试使用 Ruby 对 i18n 翻译 YAML 文件进行排序,以便我可以更好、更有条理地管理新翻译,但我一直在想是否有什么方法可以简化这项任务。

我找到了一个 YAML 文件编写器,因此我可以将哈希写入文件,但我的问题是正确排序哈希。如果我得到散列 hh.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

关于ruby - 如何对 YAML 文件进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7275952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com