-1

Rails では、2 次元を作成しようとしていますが、多くの検索中に、ほとんどの人が代わりにArray, HASH使用する必要があることを示唆していることがわかりました。

ここでは、降順の年の配列を作成しようとしていますが、この年はランダムに取得されるため、配列ソートを使用しました。ここで問題が発生します。毎年の日数のように、年にもう 1 つの値を渡したいと思います。

したがって、並べ替え中に、別の配列に存在する関連する値が失われます。

例 :

   year = ["1990", "1995", "2010", "1985" ]
   days = [ '10', '20', '2', '50' ]

現在、年ごとに降順で日を並べ替えることができません。

4

2 に答える 2

2

あなたの構文は少しずれています...中括弧で閉じたハッシュを開く必要があります:

{"1990" => '10', "1995" => '20', "2010" => '2', "1985" => '50'}

基本的に、その年に関連付けられた日数で年をキーイングしています。キーを設定するには、ハッシュ ロケット ( =>) を使用してキーと値を示します。

次に、キーの降順 (あなたの場合は年) に並べ替えるには、次の方法で並べ替えを逆にします。

hash = {"1990" => '10', "1995" => '20', "2010" => '2', "1985" => '50'}

sorted = Hash[hash.sort.reverse]
#=> {"2010"=>"2", "1995"=>"20", "1990"=>"10", "1985"=>"50"}

最後に、年ごとの日数にアクセスできます。

sorted["1995"] #=> "20"
sorted["1985"] #=> "50"

または、各ペアに順番にアクセスします。

sorted.each do |k, v|
    puts "Year: ".k." has ".v"\n"
    puts "Now let's look at the previous year."
end

編集:

2 つの配列をマージして、連続するキーと値のペアのハッシュにする場合は、次のようにします。

years = ["1990", "1995", "2010", "1985"]
days = ['10', '20', '2', '50']

Hash[*years.zip(days).flatten]
#=> {"1990"=>"10", "1995"=>"20", "2010"=>"2", "1985"=>"50"} 
于 2013-06-19T06:56:37.743 に答える
0

良いワンライナーは以下のようになります:

昇順:

year = ["1990", "1995", "2010", "1985"]
days = [ '10', '20', '2', '50' ]

h = Hash[year.zip(days).sort]
#=> {"1985"=>"50", "1990"=>"10", "1995"=>"20", "2010"=>"2"}

降順:

year = ["1990", "1995", "2010", "1985"]
days = [ '10', '20', '2', '50' ]

p h = Hash[year.zip(days).sort.reverse]
#=> {"2010"=>"2", "1995"=>"20", "1990"=>"10", "1985"=>"50"}
于 2013-06-19T07:24:25.663 に答える