有一个这样的数组:
a = [1,2,3,4]
我希望得到size
和sum
的返回值。
size = a.size
sum = a.sum
有没有办法像这样通过单行获取两个值?
size, sum = a.some_method(&:size, &:sum)
答案 0 :(得分:3)
在Ruby中,您可以在一行中执行多项任务:
size, sum = a.size, a.sum
但它并没有让它更具可读性。
答案 1 :(得分:1)
你可以这样做:
a = [1,2,3,4]
methods = [:size, :max, :min, :first, :last]
methods.map { |m| a.send m }
#=> [4, 4, 1, 1, 4]
答案 2 :(得分:0)
另一种可能的解决方案:
size, sum = a.size, a.reduce { |a,b| a = a + b }
答案 3 :(得分:0)
以前的答案是正确的,但是如果OP实际上担心多次遍历数组,那么array.size
不会遍历数组,它只返回长度,因此在这方面没有保存来自oneliner
另一方面,如果size
只是一个例子而且问题更多是关于一次对阵列进行多次操作,那么尝试这样的事情:
arr = [1,2,3,4,5,6]
product,sum = arr.inject([1,0]){|sums,el| [sums[0]*el, sums[1]+el]}
# => [720, 21]
也就是说,为结果注入多个初始值,然后计算每个元素的新值。