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]