Arrays 在ruby中比较后返回修改的数组

Arrays 在ruby中比较后返回修改的数组,arrays,ruby,Arrays,Ruby,我有两个阵列: arr1 = [10,20,7] arr2=[] 在第一个阵列上,我正在执行类似于以下内容的除法计算: arr1.each do |i| res = i.to_f/2.0 arr2.push(res.round) end 这将返回arr2=[5,10,4] 再次从输出数组中,我想与第一个数组进行比较,即[10,20,7] 如果输出数组arr2包含arr1 我想用value/2.0 我可以做如下比较: arr2.any?{|x| arr1.include?(

我有两个阵列:

arr1 = [10,20,7]
arr2=[]
在第一个阵列上,我正在执行类似于以下内容的除法计算:

 arr1.each do |i|
    res = i.to_f/2.0
   arr2.push(res.round)
 end 
这将返回
arr2=
[5,10,4]

再次从输出数组中,我想与第一个数组进行比较,即
[10,20,7]

如果输出数组
arr2
包含
arr1

我想用
value/2.0

我可以做如下比较:

arr2.any?{|x| arr1.include?(x)}

但我想在比较后替换该值。如何执行此操作?

作为
任何?
仅通过计算块中的条件返回布尔值,它不允许您对接收器进行任何修改

您可以使用
map
返回一个新对象,其中
arr2
arr1
中的值除以2.0:

arr2.map do |x|
  match = arr1.find { |y| x == y }
  match ? match / 2.0 : x
end
# [5, 5.0, 4]

find
允许您在接收器中查找与块中的条件匹配的元素,如果存在,则返回第一个元素,否则返回nil。

可以一步完成
arr2
的构造:
arr2=arr1.map{n|m=(n/2.0).ceil;arr1.include?(m)?m/2.0:m}
。如果
arr1
较大,则可以加快速度:
需要“设置”;s1=arr1.0至_集;arr2=arr1.map{n|m=(n/2.0).ceil;s1.include?(m)?m/2.0:m}
…如果
arr1
只包含整数,则更好一点:
arr2=arr1.map{n|m=(n/2.0).ceil;n.偶?&&arr1.include?(m)?m/2.0:m}