3

这就是我如何处理 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

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

4

3 回答 3

7

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

如果输出原始值是好的,只要它们排序良好,你可以使用这个:

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

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

myhash.values.sort_by(&:downcase)

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

myhash.values.map(&:downcase).sort
于 2012-08-09T15:31:25.567 回答
3

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

myhash.sort_by{|_,v| v.downcase}
于 2012-08-09T16:06:51.503 回答
1

这可能更有效...

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

=> [“1”、“42”、“阿尔法”、“二月”、“一月”、“一月”、“斑马”]

只需使用忽略输入大小写的测试功能即可。这取决于您是否希望输出数组具有重复值(例如一月/一月与一月/一月)。

于 2012-08-09T17:22:09.690 回答