Jam*_*ren 23 ruby ruby-on-rails
鉴于:
shipping_costs = {
key1: 45,
key2: 99,
key3: nil,
key4: 24
}
Run Code Online (Sandbox Code Playgroud)
假设nil = 0,获得最大值的最简洁方法是什么?
如果我shipping_costs.values.max
在Rails控制台中直接运行,我会得到:
ArgumentError: comparison of Fixnum with nil failed
Run Code Online (Sandbox Code Playgroud)
在运行max之前将这些nils变成零的最干净的方法?
Sha*_*ell 30
我会去:
shipping_costs.values.map(&:to_i).max
Run Code Online (Sandbox Code Playgroud)
nil.to_i
是0
.
max
采取一个块,允许您进行比较,类似于如何sort
工作:
[45, 99, nil, 24].max{ |a,b| (a || 0) <=> (b || 0) }
=> 99
Run Code Online (Sandbox Code Playgroud)
要么:
[45, 99, nil, 24].max{ |a,b| a.to_i <=> b.to_i }
=> 99
Run Code Online (Sandbox Code Playgroud)
这使您可以在比较发生之前强制显示您想要/需要的值.
对于您的情况,shipping_costs.values
将返回您需要比较的数组,因此:
shipping_costs.values.max{ |a,b| a.to_i <=> b.to_i }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12883 次 |
最近记录: |