ネストされたハッシュを送信しています。その値でソートする必要があります。ネストされたハッシュの項目を値で並べ替えます。
@foo = {"a"=>{"z"=>5, "y"=>3, "x"=>88}, "b"=>{"a"=>2, "d"=>-5}}
次のことを実行している:例えば
@foo["a"].sort{|a,b| a[1]<=>b[1]}
私が手:
[["y", 3], ["z", 5], ["x", 88]]
は、これは素晴らしいですが、それは私が望むまさにです。問題は、私はいつもすべての鍵が私に送られていることを知るつもりではないので、何らかのループが必要だということです。
@foo.each do |e|
e.sort{|a,b| a[1]<=>b[1]}
end
[0]私は
"a"
を取得し、@ foo.first [1]
を返しfoo.first私は手動で@を呼び出す場合ので、私にはこれが理にかなって:私は、次の手順を実行してみました{"z"=>5, "y"=>3, "x"=>8}
しかし、何らかの理由で、これは適切にソートされていません(たとえば、まったく)。これは、それぞれが "a"の値ではなく、ハッシュオブジェクト全体でソートを呼び出すためだと仮定します。ネストされたハッシュの値にアクセスするには、それが重要なことを知らずにどうすればよいですか?
1)ソートの代わりにEnumerable#sort_byを使用することは概念的には好都合ですが、Phrogzの答えを確認してください。 2)これはインプレイス・オペレーションを行い、新しいオブジェクトを作成する(機能的なアプローチ)ことで、コードを簡単にフォローできます。 – tokland
@tokland - すべての素晴らしい点ですが、私の目標は実際の問題を解決しながらOPコードに従うことでした。新しいオブジェクトを作成する方が簡単ですが、仮の変数をオリジナルに戻したい場合は、それを作成しない方がきれいです。 –