@key
包含四个不同的三位整数的数组。 someArray
有大约十位三位数的整数。我有一个方法,有一个我试图修改的数组。我正在使用map!
来完成此任务:
def multiply()
count = 0
@someArray.map! do |map|
if @key[count]
map = map * @key[count]
count = count + 1
else
count = 0
map = map * @key[count]
count = 1
end
end
print @someArray
end
我收到了一些意想不到的结果。这打印[1,2,3,4,1,2,3,4,1,2,3,4,1,2]
。为什么不打印map * @key
值而不是计数?
答案 0 :(得分:2)
.map
使用块中的返回值。您的返回值为count = 1
或count = count + 1
。
你不能指定超过块的输入变量,这绝对没有效果。
正确地写了,你的块看起来像这样:
@someArray.map! do |i|
if @key[count]
i *= @key[count]
count = count + 1
else
i *= @key[0]
count = 1
end
i
end
顺便说一句,这对map
的使用略显不合适。结合两个数组的元素有更好的方法,即使其中一个数组更短。
给出两个输入:
someArray = [1,2,3,4,5,6,7,8,9,0]
key = [2,4,6]
您可以将这两个数组合并为一个数组,使用.cycle
生成一个枚举器,它将环绕,以便两个数组在功能上具有相同的长度:
pairs = someArray.zip(key.cycle)
# => [[1, 2], [2, 4], [3, 6], [4, 2], [5, 4], [6, 6], [7, 2], [8, 4], [9, 6], [0, 2]]
然后,您可以映射生成的数组,将这些对相乘:
pairs.map { |a,b| a * b }
# => [2, 8, 18, 8, 20, 36, 14, 32, 54, 0]
所以,总的来说,你的方法是:
def multiply()
@someArray.zip(@key.cycle).map { |a,b| a * b }
end