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 的用户时,它会抛出一个错误。我尝试unless user.age.nil?sort_by块中添加一个,但这没有帮助。

有任何想法吗?

4

3 回答 3

13

nil对象视为其他东西,也许0Float::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

对于布尔值,基于 megas 的解决方案:

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

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