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}