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 でハッシュをまったく注文しませんでした。標準形式のデータ構造は順序付けされていません。

順序付けが重要な場合は配列を使用し、キー検索が必要な場合はハッシュなどを使用する方が良いスタイルです。

テストを書くときは灰色の領域があります。その場合、特定の条件で特定の 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 に答える