Arrays 仅修改前n个元素,并以ruby返回修改后的数组

Arrays 仅修改前n个元素,并以ruby返回修改后的数组,arrays,ruby,Arrays,Ruby,我需要对数组的k值集执行一个操作,并返回修改后的数组 我有一个数组=[10,32,5,6,7] 让我们说k=2 我试图通过以下方式仅考虑前两个要素: arr2=[] array[0..k-1].each do |i| res=i.to_f/2.0 arr2.push(res.round) end =>arr2=[5,16] 我想用arr2值替换数组中的前两个元素。 如何在不创建这么多新阵列的情况下实现这一点。您不需要推送到新阵列,为什么不这样做: array = [10,32,5,

我需要对数组的
k
值集执行一个操作,并返回修改后的数组

我有一个
数组=[10,32,5,6,7]

让我们说
k=2

我试图通过以下方式仅考虑前两个要素:

arr2=[]
array[0..k-1].each do |i|
 res=i.to_f/2.0
 arr2.push(res.round)
end

=>arr2=[5,16]
我想用
arr2
值替换
数组中的前两个元素。

如何在不创建这么多新阵列的情况下实现这一点。

您不需要推送到新阵列,为什么不这样做:

array = [10,32,5,6,7]
k = 2

array[0..k-1].each_with_index do |val, indx|
  array[indx] = val / 2 # or whatever processing really
end
这是一种简单的方法来解决您的问题。每个带有索引的_都在这里完成工作,允许您轻松地修改初始数组。这将输出:

[5, 16, 5, 6, 7]

您当前的实现有什么问题?无需计算,只需对数组中的其他元素求和:

arr2=[]
array[0..k-1].each do |i|
 res=i.to_f/2.0
 arr2.push(res.round)
end
arr2 + array[k..-1] # [5, 16, 5, 6, 7]
  • 无论何时执行
    integer.to_f/…
    ,都可以执行
    fdiv
  • 您可以使用
    map
    ,而不是分配“memo”数组:
  • 您可以使用独占范围
    0…k
    ,而不是执行
    k-1
    来获取范围
您的代码如下(无需修改
数组
):


不需要迭代整个数组

array = [10,32,5,6,7]

array[0, 2] = array[0, 2].map { |n| n/2.0 }
array
  #=> [5.0, 16.0, 5, 6, 7] 

以上内容反映了我对原始数组将进行变异的理解。如果数组不进行变异,可以编写以下代码

array[0, 2].map { |n| n/2.0 }.concat(array[2..-1])
  #=> [5.0, 16.0, 5, 6, 7] 
array
  #=> [10, 32, 5, 6, 7] 
array = [10,32,5,6,7]

array[0, 2] = array[0, 2].map { |n| n/2.0 }
array
  #=> [5.0, 16.0, 5, 6, 7] 
2.times { |i| array[i] = array[i]/2.0 }
array
  #=> [5.0, 16.0, 5, 6, 7] 
array[0, 2].map { |n| n/2.0 }.concat(array[2..-1])
  #=> [5.0, 16.0, 5, 6, 7] 
array
  #=> [10, 32, 5, 6, 7]