2016-10-20 4 views
0

は、私は私が私が最初に:job_numどのようにして、ある値でハッシュの配列をソートした後、それを再度ソートするのですか?

で私の配列をソートする必要が :date

array = [ 
    {job_num: 1236, date: Date.parse('2016/10/19')}, 
    {job_num: 1234, date: Date.parse('2016/10/17')}, 
    {job_num: 1236, date: Date.parse('2016/10/20')}, 
    {job_num: 1233, date: Date.parse('2016/10/18')} 
] 
# => [{:job_num=>1236, :date=>#<Date: 2016-10-19 ((2457681j,0s,0n),+0s,2299161j)>}, {:job_num=>1234, :date=>#<Date: 2016-10-17 ((2457679j,0s,0n),+0s,2299161j)>}, {:job_num=>1236, :date=>#<Date: 2016-10-20 ((2457682j,0s,0n),+0s,2299161j)>}, {:job_num=>1233, :date=>#<Date: 2016-10-18 ((2457680j,0s,0n),+0s,2299161j)>}] 

ことによってそれをソートする必要:job_numによって並べ替えられ、その後:job_numの数値で注文する必要がハッシュの大規模な配列を持っています

array.sort! { |x,y| x[:job_num] <=> y[:job_num] } 
# => [{:job_num=>1233, :date=>#<Date: 2016-10-18 ((2457680j,0s,0n),+0s,2299161j)>}, {:job_num=>1234, :date=>#<Date: 2016-10-17 ((2457679j,0s,0n),+0s,2299161j)>}, {:job_num=>1236, :date=>#<Date: 2016-10-20 ((2457682j,0s,0n),+0s,2299161j)>}, {:job_num=>1236, :date=>#<Date: 2016-10-19 ((2457681j,0s,0n),+0s,2299161j)>}] 

私は、それはすべてがうまくいけば、配列はこのようになっていることを終わるべきで、それはジョブ番号でソートした後、日付でソートする必要があります。

array = [ 
    {job_num: 1233, date: '2016/10/18'}, 
    {job_num: 1234, date: '2016/10/17'}, 
    {job_num: 1236, date: '2016/10/19'}, 
    {job_num: 1236, date: '2016/10/20'} 
] 

(I論理への単なる例と無関係なので、最終的なアレイの日付解析を中断した)

+0

これを実行する際にいくつかのコードを投稿できますか? – roelofs

答えて

0

array.sort_by! { |item| [item[:job_num], item[:date]] } 
0
array.sort! { |x,y| 
    by_job_num = x[:job_num] <=> y[:job_num] 
    by_job_num.zero? ? x[:date] <=> y[:date] : by_job_num 
} 
+0

このコードスニペットは問題を解決するかもしれませんが、それがなぜ、どのように質問に答えるかは説明しません。 [あなたのコードの説明を含めてください](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)、本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 **フラグ/査読者:** [このようなコードのみの回答については、downvoteは削除しないでください!](// meta.stackoverflow.com/a/260413/2747593) –

1

を試しここルビー列挙sort_by法を用いて溶液です:

#! /usr/bin/env ruby 

require 'date' 

puts "Sorting an array" 
array = [ 
    {job_num: 1236, date: Date.parse('2016/10/19')}, 
    {job_num: 1234, date: Date.parse('2016/10/17')}, 
    {job_num: 1236, date: Date.parse('2016/10/20')}, 
    {job_num: 1233, date: Date.parse('2016/10/18')}, 
] 

puts array 

array.sort_by! { |x| [ x[:job_num], x[:date] ] } 

puts 
puts array 
関連する問題