结合映射和注入的Ruby数组链表
有没有一种很好的方法来创建一个结合map和inject的动态链接Ruby数组 这就是我的意思。假设a是一个整数数组,那么要得到两个相邻元素的所有和,我们可以:结合映射和注入的Ruby数组链表,ruby,inject,map-function,chainable,Ruby,Inject,Map Function,Chainable,有没有一种很好的方法来创建一个结合map和inject的动态链接Ruby数组 这就是我的意思。假设a是一个整数数组,那么要得到两个相邻元素的所有和,我们可以: a.each_cons(2).map(&:sum) 我们还可以通过以下方式获得数组a中所有元素的乘积: 但我们不能这样做: a.each_cons(2).map(&:inject(1,&:*)) 但是,我们可以定义一个可链接的数组: class Array def prod return self
a.each_cons(2).map(&:sum)
我们还可以通过以下方式获得数组a中所有元素的乘积:
但我们不能这样做:
a.each_cons(2).map(&:inject(1,&:*))
但是,我们可以定义一个可链接的数组:
class Array
def prod
return self.inject(1,&:*)
end
end
然后a.each_cons2.map&:prod可以正常工作。如果使用此处显示的wierd符号补丁: 这允许您通过以下方式将参数传递给proc速记:
我确信Ruby core中已经多次请求过这个,不幸的是,我现在没有Ruby论坛的链接,但我向您保证它就在那里。如果您使用此wierd Symbol补丁,如下所示: 这允许您通过以下方式将参数传递给proc速记:
我确信Ruby core中已经多次请求过这一点,不幸的是,我现在没有Ruby论坛的链接,但我向您保证它就在那里。我怀疑这是您想要的,但不要忘记,您仍然可以使用普通块调用map
a.each_cons(2).map { |n1, n2| n1 * n2 }
由于您在问题中没有提到它,我认为您可能忽略了最简单的选项。我怀疑这是否是您要寻找的,但不要忘记,您仍然可以使用普通块调用map
a.each_cons(2).map { |n1, n2| n1 * n2 }
既然你在问题中没有提到这一点,我想你可能忽略了最简单的选择
[[1,2],[3,4]].map(&:inject.(1, &:*))
# => [2, 12]
a.each_cons(2).map { |n1, n2| n1 * n2 }