私は2つの配列を持っています:
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を返すことができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加