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

Dav*_*itt 1 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
Run Code Online (Sandbox Code Playgroud)

输出:

1
42
alpha
february
january
january
zebra
Run Code Online (Sandbox Code Playgroud)

这工作正常,我没有问题,但想知道是否有一个更简单/更有效的方式,我错过了?

Ant*_*rto 5

既然你想修改值(输出小写字符串),我认为你不能做更好的事情.

如果输出原始值只要排序很好就可以了,你可以使用:

 myhash.values.sort_by{|h|h.downcase}
Run Code Online (Sandbox Code Playgroud)

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

myhash.values.sort_by(&:downcase)
Run Code Online (Sandbox Code Playgroud)

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

myhash.values.map(&:downcase).sort
Run Code Online (Sandbox Code Playgroud)