Techioz Blog

配列内にnilオブジェクトがある場合、Rubyで配列をソートするにはどうすればよいですか?

概要

Rubyにこのような配列がある場合、配列をソートするにはどうすればよいですか?

例 :

my_array = ["12 months", "13 months", nil, nil, "12"]

このような結果を取得したい:

 my_array = ["12", "12 months", "13 months", nil, nil]

私が試してみると:

my_array.sort{|x, y| x <=> y}

次のようなエラーが発生します:

ArgumentError Exception: comparison of String with nil failed

どのように修正すればよいでしょうか?

前にありがとう

解決策

nil を処理すれば、それに近づくことができます…

2.1.2 :010 > my_array.sort { |x,y| x && y ? (x <=> y) : (x ? -1 : 1) }
 => ["12", "12 months", "13 months", nil, nil] 

これは正確ではありません。<=> 比較に基づいて、「12」が残りの部分より前に来ます。さらに制御したい場合は、より複雑な比較ブロックが必要になります。