这就是我在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
这很好用,我没有问题,但是想知道我是否有更简单/更有效的方法?
答案 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月)。