配列内に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」が残りの部分より前に来ます。さらに制御したい場合は、より複雑な比較ブロックが必要になります。