在 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?(x)}

但我想在比较后替换该值。我该怎么做?

由于any?只通过评估块中的条件来返回布尔值,因此它不允许对接收器进行任何修改。

您可以通过使用map并返回一个新对象来执行此操作,其中arr2arr1中的值除以 2.0:

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

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

最新更新