将方法的proc作为块提供

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)

  • 唯一一个仔细阅读问题的人. (2认同)

Jör*_*tag 14

@ sepp2k的答案是更普遍的答案,但在你的具体情况下,我会使用

arr.min_by(&:last)
arr.max_by(&:last)
Run Code Online (Sandbox Code Playgroud)

因为这比所有那些花括号和方括号以及浮动的数组索引明显得多.