3

私はこのようなハッシュを持っています:

a = { 29 => 3, 14 => 6, 13 => 2, 32 => 10 }

そこにある値、つまり3,6,2,10に基づいてこのハッシュを並べ替えたい

できますa.values.sort

ただし、ソートされた値のみの配列を返します。実際のハッシュを並べ替えたいので、すべて同じキーと値のペアで並べ替えられた新しいハッシュを返す必要があります(または、理想的には元のハッシュを並べ替えられたハッシュで更新します)。

4

2 に答える 2

5

これはRuby1.9で動作します。

a = { 29 => 3, 14 => 6, 13 => 2, 32 => 10 }
p Hash[a.sort_by{|k,v| v}]
#=> {13=>2, 29=>3, 14=>6, 32=>10}
于 2012-04-19T20:50:01.343 に答える
2

Ruby(1.9より前)のハッシュはソートされていません。ハッシュの実装ではエントリがソートされたままにならないため、「同じキーと値のペアがソートされた新しいハッシュを返すことはできません」。2つのオプションがあります。

  1. ActiveSupport :: OrderedHashのインスタンスを使用します(active_support gemから)
  2. 並べ替えられたペアの配列を使用して、並べ替えられた入力を必要とするアクションを実行します。その配列をハッシュコンストラクター(Hash.newまたはHash [])に渡すことにより、ハッシュに変換し直します。
于 2012-04-19T20:50:58.557 に答える