从Ruby哈希中排序值,忽略大小写

时间:2012-08-09 15:23:32

标签: ruby sorting hash

这就是我在Ruby哈希中处理值以获得字母数字小写排序输出的方式(极端示例):

myhash = {
  "x" => "zebra",
  "one" => "1",
  "alpeh" => "alpha",
  "lower" => "january",
  "1" => "January",
  "2" => "February",
  "answer" => "42"
}
m = myhash.values
puts m.map{|i| i.downcase}.sort

输出:

1
42
alpha
february
january
january
zebra

这很好用,我没有问题,但是想知道我是否有更简单/更有效的方法?

3 个答案:

答案 0 :(得分:5)

由于你想修改这些值(输出小写字符串),我认为你不能做得更好。

如果输出原始值只要排序良好,则可以使用:

 myhash.values.sort_by{|h|h.downcase}

编辑:感谢Casper,这是一个更紧凑的版本:

myhash.values.sort_by(&:downcase)

编辑:感谢Mischa,如果你想保留你提供的输出:

myhash.values.map(&:downcase).sort

答案 1 :(得分:3)

比使用hash.values更有效的方法(因为它创建了一个临时数组,如果哈希很大,可能会耗费时间/空间)

myhash.sort_by{|_,v| v.downcase}

答案 2 :(得分:1)

这可能更有效......

m.sort {| a,b | a.casecmp(B)}

=> [“1”,“42”,“alpha”,“二月”,“一月”,“一月”,“斑马”]

只需使用忽略输入情况的测试功能。这取决于您是否希望输出数组具有重复值(例如,1月/ 1月对1月/ 1月)。

相关问题