我有一个哈希:
dict = {
"someKey" => [ ... ],
"anotherKey" => [ ... ],
"yetAnōtherKéy" => [ ... ]
}
我想通过对原始内容进行排序来获得新的哈希值。排序应该忽略重音(通过用非重音版本替换重音字符来完成),
replacements = [
["ā", "a"], ["á", "a"], ["à", "a"], ["ǎ", "a"],
["ō", "o"], ["ó", "o"], ["ò", "o"], ["ǒ", "o"],
["ī", "i"], ["í", "i"], ["ì", "i"], ["ǐ", "i"],
["ē", "e"], ["é", "e"], ["è", "e"], ["ě", "e"],
["ū", "u"], ["ú", "u"], ["ù", "u"], ["ǔ", "u"]
]
但是生成的哈希中的键应该保留原始键。怎么可能?
我试过
dict = Hash[dict.sort_by{|k,v| k}]
这可以并且对哈希进行排序。但是,它不会忽略重音,即以重音字符开头的单词会显示在底部。
另一种尝试是:
replacements.each {|replacement| z.gsub!(replacement[0], replacement[1])}
答案 0 :(得分:3)
根据Cary Swoveland的评论更正了代码。
replacements = Hash.new{|_, k| k}.merge(replacements.to_h)
dict.sort_by{|k,_| k.gsub(/./, replacements)}.to_h
答案 1 :(得分:1)
require 'unidecoder'
Hash[dict.sort_by{|k,v| k.to_ascii }]
答案 2 :(得分:0)
通过传入首先执行替换的块gsub
(如有必要)来覆盖排序方法,然后进行比较<=>
。排序将返回已排序的枚举的原始项。我通过阅读文档ri Hash.sort
得出的解决方案。