2017-01-13 3 views
1

2つの配列を比較したいと思います。配列と比較して一致しない要素を数える方法 - Ruby

arr1 = ["A", "B", "C"] 
arr2 = ["A", "D", "E"] 

その二つの要素があるので、私は2を返すメソッドが必要になります。一人一人には文字が異なっている場合、それは例えば一致しませんでした手紙に等しい数を返し、3つの文字を持っています一致しません。

+0

なぜあなたは単に行わない '(ARR1 - ARR2).length' ? –

+0

"A"の場合、このエラーは '未定義のメソッド' - 'を返します:String' – Bitwise

+0

[ここ](https://repl.it/FILI)はうまく動作します。 –

答えて

3

Enumerable#zipArray#countを使用できます。

arr1.zip(arr2).count { |a1,a2| a1!=a2 } 
    #=> 2 

arr1.zip(arr2) 
    #=> [["A", "A"], ["B", "D"], ["C", "E"]] 

同等に、Array#transposeを使用しています。あなたの配列は同じ長さであり、重複していないと仮定すると、

[arr1, arr2].transpose.count { |a1,a2| a1!=a2 } 
    #=> 2 
+0

あなたの答えは、いつものように、ルビーのように正確です。 –

+1

また、それを徐々に煮詰めるには、 'arr1.zip(arr2).map(&:uniq).map(&:length).count(1)'を実行します。 – tadman

0

が、これは速くなるだろう:

arr1.length - (arr1 & arr2).length 
# => 2 
+0

'arr1 = [1,2]'と 'arr2 = [2,1]'なら結果は2になると思うが、ゼロを得る。たぶん私たちはその質問を違った方法で解釈しました。 –

+0

@CarySwovelandええ、それは言いたいことは言います。 「マッチ」とは何ですか?ポジションは重要かどうか? – coreyward

関連する問題