我有一个像这样的散列:
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])}
最佳答案
根据 Cary Swoveland 的评论更正了代码。
replacements = Hash.new{|_, k| k}.merge(replacements.to_h)
dict.sort_by{|k,_| k.gsub(/./, replacements)}.to_h
关于ruby - 按键排序散列,忽略重音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33082588/