Cri*_*dma 11 ruby codeblocks proc
假设我有以下数组:
arr = [[5, 1], [2, 7]]
Run Code Online (Sandbox Code Playgroud)
我想找到最小元素,比较元素的第二个元素.最小元素将是[5, 1]因为1小于7.我可以使用以下代码:
arr.min {|a,b| a[1] <=> b[1]}
Run Code Online (Sandbox Code Playgroud)
为了计算最大值,我也可以这样做:
arr.max {|a,b| a[1] <=> b[1]}
Run Code Online (Sandbox Code Playgroud)
这给了[2, 7].
我一直使用相同的块.我想在某处拥有该块并将其提供给min/max函数.我希望这样的事情:
blo = lambda {|a,b| a[1] <=> b[1]}
arr.min blo
Run Code Online (Sandbox Code Playgroud)
会工作,但它没有.有关如何做到这一点的任何想法?
sep*_*p2k 24
使用&运算符将Proc对象转换为块.
arr.min &blo
Run Code Online (Sandbox Code Playgroud)
Jör*_*tag 14
@ sepp2k的答案是更普遍的答案,但在你的具体情况下,我会使用
arr.min_by(&:last)
arr.max_by(&:last)
Run Code Online (Sandbox Code Playgroud)
因为这比所有那些花括号和方括号以及浮动的数组索引要明显得多.
| 归档时间: |
|
| 查看次数: |
4793 次 |
| 最近记录: |