我有一个看起来像这样的哈希
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中放入一个数组而不是一个哈希,我想保持哈希值只是重新排序...我该怎么做?
答案 0 :(得分:2)
依靠Hash排序并不是一个好主意。 Ruby在1.8中没有订购哈希值。规范形式的数据结构不是有序的。
在订购时使用数组是更好的风格,在需要进行密钥查找时使用哈希或其他东西。
编写测试时有灰色区域。在这种情况下,依赖于Hash排序可能是合理的,因为您在某些条件下测试特定的Ruby程序,毕竟,如果实现假设发生变化,您可能会失败。
答案 1 :(得分:1)
您需要将数组转换回哈希:
h1 = Hash[h1.sort_by { |_,v| v[-1] }]
请注意,这仅适用于Ruby 1.9。在此之前,哈希不是一个有序的数据结构。