2016-11-22 5 views
0

私はいくつかのランダムな順序のハッシュを持っており、そのハッシュのキーは配列内にあります。これは配列内のキーの順番に従って、キーでルビーハッシュをソートするにはどうすればよいですか?

new_hash = { 'ONE' => "this is the first", 
      'TWO' => 'second', 
      'THREE' => "this is the third" } 
+0

を?ランダムアクセスなので、あまりうまくいきません。 'my_array'の順番でキーを取得するだけです。 –

+0

"[ask]"と "[mcve]"とhttp://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-usersをお読みください。解決策を検索した場所とその理由がわからない理由、または問題を解決するために書いた内容を示す最小限のコードと、それが正しく機能しない理由を説明してください。あなたのために問題を解決するように私たちに求めているように見えない。そして、ちょうどあなたが知っているように、この質問は何度も尋ねられているので、答えはそこにあります。 –

+0

@theTinManはハッシュを読みやすくするために並べ替えるケースがありますか? –

答えて

1

方法で注文を取得する方法

my_array = ['ONE', 'TWO', 'THREE'] 
my_hash = { 'THREE' => "this is the third", 
      'ONE' => "this is the first", 
      'TWO' => 'second' } 

このお試しください:なぜハッシュを注文

my_array = ['ONE', 'TWO', 'THREE'] 
my_hash = { 'THREE' => "this is the third", 
      'ONE' => "this is the first", 
      'TWO' => 'second' } 

my_array.zip(my_array.map {|s| my_hash[s]}).to_h 
#=> {"ONE"=>"this is the first", "TWO"=>"second", "THREE"=>"this is the third"} 
+2

ハッシュが特定の順序を持​​つことを期待すると問題が発生する可能性があるので避けるのが最善です。 – tadman

+1

ハッシュは挿入順を維持していますが、それはちょっといいですが、それはほとんど不可欠ではありません。キーを注文する習慣を身につけ、その順序で値を抽出します。 'values_at'は私たちの友人であり、とても簡単です。ハッシュ内のキーを並べ替えるか並べ替えると、値を取得するときに同じことが達成できるので、実際にはCPU時間が浪費されます。 –

+1

ええ、そういう意味です。任意の順序を取得するためにハッシュを再構築しなければならないのは、他の2つのキーの間にキーを挿入するときのように高価です。本質的に配列された配列のように扱うのは、通常は間違いです。彼らは一貫性のためだけに注文されています。同じ方法で作られた2つのハッシュが同一になるでしょう。歴史的にはこれは当てはまりませんでした。彼らはしばしば無作為化され、予測不可能でした。 – tadman

関連する問題