2

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

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]}

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

4

2 回答 2

2

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

当排序很重要时使用 Array 更好的样式,当需要键查找时使用 Hash 或其他东西。

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

于 2012-06-17T22:03:19.650 回答
1

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

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

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

于 2012-06-17T21:58:40.853 回答