我需要对数组的 k 个值执行某个操作,并返回修改后的数组。
我有一个数组 array = [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
的前两个元素,不想创建太多新数组,有什么方法可以实现吗?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]
您无需将其推送到新数组中,为什么不这样做:
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" 数组:arr2 = array[0..k-1].map do |i|
res=i.to_f/2.0
res.round
end + array[k..-1]
arr2 # [5, 16, 5, 6, 7]
k - 1
来获取范围,可以使用一个左闭右开的范围 0...k
。你的代码应该像这样(不修改 array
):
array[0...k].map { |i| i.fdiv(2.0).round } + array[k..-1] # [5, 16, 5, 6, 7]