3

キーがユーザーオブジェクトであるハッシュの配列があります(これは、次のようにユーザーごとに検索結果をグループ化しているためです:) #<User:0x007ffa3d570f00> => ["taco","pizza","unicorn"]

次のように、ハッシュの配列をUserオブジェクトの属性で並べ替えることができるようにしたいと思います。

search_results.sort_by{|item| item[0].age} #item[0] = User object

ただし、これは、ArgumentError: comparison of NilClass with Integer failed年齢がNilである最初のユーザーに遭遇したときにをスローします。sort_byブロックにを追加しようとしunless user.age.nil?ましたが、これは役に立ちませんでした。

何か案は?

4

3 に答える 3

13

nilオブジェクトを何か他のものとして扱います、おそらく0またはFloat::INFINITY

search_results.sort_by { |user| user.age || 0 }

以来nil.to_i == 0、次のこともできます。

search_results.sort_by { |user| user.age.to_i }
于 2012-04-20T00:32:55.270 に答える
2

これを試して:

search_results.sort_by{|user| user.age ? user.age : 0 }
于 2012-04-20T00:36:16.070 に答える
0

メガの解に基づくブール値の場合:

[true, false, false, true].sort { |a|
         a ? 0 : 1
      }

=> [true, true, false, false]
于 2016-07-07T22:13:55.930 に答える