当某些对象具有nil属性时,对哈希数组进行排序

时间:2012-04-20 00:29:55

标签: ruby sorting hash

我有一个哈希数组,其中键是用户对象(这是因为我正在按用户对搜索结果进行分组:#<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。我尝试在 sort_by 块中添加unless user.age.nil?,但这没有帮助。

有什么想法吗?

3 个答案:

答案 0 :(得分:12)

nil个对象视为其他对象,可能是0Float::INFINITY

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

nil.to_i == 0以来,你也可以这样做:

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

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:0)

对于布尔值,基于megas&#39;溶液:

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

=> [true, true, false, false]