在Ruby中使用索引位置遍历数组

3
我正在为一门课程做准备,其中一个挑战(我惨败了)大致如下:
定义一个方法,将数组作为参数,并将数组中的每个值乘以其在数组中的位置。
因此,基本上,数组= [1,2,3,4,5] 应该返回 1*0、2*1、3*2、4*3、5*4。
我很难弄清楚该如何做。 我认为他们不希望我们使用 .inject 或 .reduce 或任何除基础操作之外的东西。
这是我目前为止所做的,但它无法运行:
array = [1,2,3,4,5]

def calculator (arr)
new_arr = []
new_arr = arr.each_with_index {|value, index| value * index}
end

calculator(array)

我尝试了一些.collect的变体和不同的参数。有时会出现参数错误,或者数组返回给我但没有任何修改。

我真的很希望能得到解释或任何建议!


1
new_arr = arr.each_with_index.map {|value, index| value * index} - BroiSatse
哇,我所缺少的就是 .map。 - user3795468
3个回答

6
[1, 2, 3, 4, 5].map.with_index(&:*)

3
对我来说最好最简单的方法是:

result = [1, 2, 3, 4, 5].each_with_index.map {|value, index| value * index}

这将导致:
[0, 2, 6, 12, 20] 



另一种方法是不使用map,可以这样做:

[1, 2, 3, 4, 5].each_with_index do |value, index| 
    puts value * index 
end

0
如果你想要一些非常基础的东西:
def calculator (array)
  count = 0
  new_array = []
  array.each do |number|
    new_array<<number*count
    count +=1
    end
  return new_array
end

这不是最“干净”的方法,但可以帮助您解决问题 :)


我理解了。你能解释一下为什么 new_arr = arr.each_with_index.map {|value, index| value * index}可以工作,但是 .each_with_index 或者 .map_with_index 单独使用都不行吗?使用 .each_with_index.map 看起来很奇怪。 - user3795468
关于 map 的酷(而且非常重要)的事情是,它将在块结束时返回一个新数组。Map 创建一个新数组,其中每个都不会。此外,map 本身无法在此情况下工作,因为它不知道“index”是什么,因为 map 只迭代整个数组。Each 不具有破坏性,也不会返回新数组。 - user3720516

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接