ArgumentError:NilClass与1个失败的min_by的比较

时间:2014-01-30 10:05:18

标签: ruby enumerable

我需要找出没有nil的数组的最小值。

[{val: 1},{val: nil}].min_by { |v| v[:val] }

ArgumentError: comparison of NilClass with 1 failed min_by

我的下一个方法是:

[{val: 1},{val: nil}].min_by { |v| v[:val] || 0 }

但这会返回{:duration=>nil}

我只想获得没有零值的最小值 - 预期为1

2 个答案:

答案 0 :(得分:5)

[{val: 1},{val: nil}].delete_if { |v| v[:val].nil? }.min_by { |v| v[:val] }

在值为nil的情况下,您可以使用delete_if来排除与块匹配的数组元素。

答案 1 :(得分:4)

您还可以reject零值

[{val: 1},{val: nil}].reject { |v| v[:val].nil? }.min_by { |v| v[:val] }

Reject将返回一个新数组,delete_if只会删除匹配块中的值 - 两者都是可能的。但我认为delete_if更适合您的情况。