ruby - 按键排序散列,忽略重音

标签 ruby sorting hash

我有一个像这样的散列:

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/

相关文章:

ruby - 为什么 "each"-ing 范围仅适用于递增范围?

java - 来自文本文件的数据评估

c++ - 将 ruby​​ 哈希转换为 c++ 映射

java - 是否有一个好的 Java 库可以基于一组属性和比较器生成保序 O(1) 哈希码?

ruby-on-rails - 删除没有固定长度的字符串的第一部分

ruby-on-rails - 参数错误 : wrong number of arguments (1 for 2)

ruby - 为什么我的 BigDecimal 计算器输出的值不正确?

javascript - 我怎么可能在 JavaScript 中对此进行排序?

sorting - 如何使用 R rank() 函数创建新的 ties.method?

perl - 如何在perl中对对象进行散列