我有两个数组:
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
并返回一个新对象来执行此操作,其中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。