排序哈希Ruby

时间:2012-06-17 21:57:31

标签: ruby

我有一个看起来像这样的哈希

h1 = {"4c09a0da6071a593f051de32"=>["4c09a0da6071a593f051de32", "Cafe Bistro", 37.78458803130115, -122.40743637084961, 215.0], "4abbb03ef964a520668420e3"=>["4abbb03ef964a520668420e3", "The Plant Cafe Organic", 37.7977805076241, -122.3957633972168, 83.0] }

我想按每个哈希中的最终值对其进行排序,例如83.0,215.0

我试过了

h1 = h1.sort_by{|k,v| v[4]}

但是在out中放入一个数组而不是一个哈希,我想保持哈希值只是重新排序...我该怎么做?

2 个答案:

答案 0 :(得分:2)

依靠Hash排序并不是一个好主意。 Ruby在1.8中没有订购哈希值。规范形式的数据结构不是有序的。

在订购时使用数组是更好的风格,在需要进行密钥查找时使用哈希或其他东西。

编写测试时有灰色区域。在这种情况下,依赖于Hash排序可能是合理的,因为您在某些条件下测试特定的Ruby程序,毕竟,如果实现假设发生变化,您可能会失败。

答案 1 :(得分:1)

您需要将数组转换回哈希:

h1 = Hash[h1.sort_by { |_,v| v[-1] }]

请注意,这仅适用于Ruby 1.9。在此之前,哈希不是一个有序的数据结构。