[英]How to use sort_by with values that could be nil? [duplicate]
这个问题在这里已有答案:
假设我有一个数组: [{one: 1, two: 2}, {one: 5, two: 6}]
,我想使用sort_by之类的东西:
[1] pry(main)> [{one: 1, two: 2}, {one: 5, two: 6}].sort_by{|x| [x[:one], x[:two]]}
但是,当我为其中一个值引入nil时,我得到了ArgumentError: comparison of Array with Array failed
:
=> [{:one=>1, :two=>2}, {:one=>5, :two=>6}]
[2] pry(main)> [{one: 1, two: 2}, {one: nil, two: 6}].sort_by{|x| [x[:one], x[:two]]}
ArgumentError: comparison of Array with Array failed
我怎样才能避免这个错误?
使用这种语法,
starred.sort_by { |a| [a ? 1 : 0, a] }
当必须比较两个元素时,它会比较一个数组。 当Ruby比较数组(调用===方法)时,它会比较第一个元素,只有当第一个元素相等时才会转到第二个元素。 ? 1 : 0
? 1 : 0
保证,我们将Fixnum作为第一个元素,所以它应该没有错误。
如果你这样做? 0 : 1
? 0 : 1
, nil
将出现在数组的末尾而不是开头。 这是一个例子:
irb> [2, 5, 1, nil, 7, 3, nil, nil, 4, 6].sort_by { |i| [i ? 1 : 0, i] }
=> [nil, nil, nil, 1, 2, 3, 4, 5, 6, 7]
来源 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.