2017-10-02 12 views
-2

ルビーで同じ長さの2つの配列の違いを取得しようとしています。インデックスルビと配列の比較

array1 = [1,2,3,4] 

array2 = [1,2,4,5] 

diffArray = [] 
diffArray = array1 - array2 # => [3] 

しかし、私は違いがarray1またはarray2に関連して発生した位置にインデックスを保存したいと思います。例えば、私はdiffArray

#diffArray => [nil,nil,3,nil]または#diffArray => ["","",3,""]

ルビーでこれを行う方法はありとして保存されたいですか?

+0

'配列1 - 配列2#=> [3]' –

+1

@movesonは「doesnの一つだけではありませんあなたの質問を理解する。彼のコメントと答えを見たときにあなたは質問を明確にする義務がありましたが、あなたは答えませんでした。それは私からdownvoteを得る。 –

答えて

2

質問が不明です。

あなたは値が一致しないする位置でarray1値に興味があるなら、あなたはこの使用することがあります:あなたはインデックスに興味がある場合

array1 = [1,2,3,4] 
array2 = [1,2,4,5] 

array1.zip(array2).map { |a, b| a if a != b } 
#=> [nil, nil, 3, 4] 

でその値が一致しない(ヒント:インデックスは0でカウント開始)、これを試してみてください。

array1.zip(array2).map.with_index { |(a, b), i| i if a != b } 
#=> [nil, nil, 2, 3] 
+0

ありがとう@spickermann。可能であれば、あなたの答えのパフォーマンスを説明できます – danynl

+2

OPは要素が異なる場所のインデックスを含むdiff配列を要求しました。 OPの例は混乱しています。なぜなら、最初の配列はシーケンシャルな数字なので、与えられた例では、返されるものは最初の配列の最後の2つの要素と等しくなります。 @ダニエルあなたは実際に返されたいものは何ですか?インデックスが必要な場合、[nil、nil、2、3]が必要な例はありませんか? – moveson

+0

@moveson:文句と例が実際にはあまり合わないので、質問はちょっと混乱します。私はそれに対処するために私の答えを更新しました。 – spickermann

1

OPが何を望んでいるか明らかではないが、もしのrequ irementは、私たちが望む、むしろアレイのうちの1つの要素よりも、インデックスを含む配列です:

array1 = [1,2,3,4] 
array2 = [1,2,4,5] 

(0...array1.size).map { |index| index if array1[index] != array2[index] } 
#=> [nil, nil, 2, 3]