前提・実現したいこと
2つの配列の差分要素をLinqを使って取得する方法のご教示をお願い致します。
(Linqを使うのがおそらく1番スマートもしくは簡潔に書けると思っていますが、違っていたらご指摘下さい。)
試したこと
下記の差分をとって、1,3,5,6,8となるように取得したいです。
C#
1 void Start () { 2 int[] arr1 = new int[]{1,2,3,4,5}; 3 int[] arr2 = new int[]{2,4,6,8}; 4 IEnumerable<int> concats = arr1.Concat(arr2); 5 IEnumerable<int> unique = concats.Distinct(); 6 unique.ToList().ForEach(x=>Debug.Log(x)); 7 }
Distinctで重複してる要素を削除できるかと思ったら、ユニークにするだけだったので、差分が取れませんでした。
そもそもConcatしようとしている時点で間違っているのかもしれません。
あと、uniqueの要素を回すのにForEachを使おうとしたら、使えなかったので、間にToList()をかましましたが、
IEnumerableを回す方法はこれが最適ですか?もっと簡潔に書ける方法がありましたらご教示お願い致します。
ご回答を受けてメモ。
C#
1 void Start () { 2 int[] arr1 = new int[]{1,2,3,4,5}; 3 int[] arr2 = new int[]{2,4,6,8}; 4 IEnumerable<int> intersect = arr1.Intersect(arr2); //2,4 5 IEnumerable<int> union = arr1.Union(arr2); //1,2,3,4,5,6,8 6 IEnumerable<int> xor = union.Except(intersect); //1,3,5,6,8 7 xor.ToList().ForEach(x=>Debug.Log(x)); 8 }
UnionとConcatの違いは、
Union(和集合)は、コレクション同士を連結する。ただし、重複するデータがある場合は1件のみに絞られる。
Concat(和集合)は、コレクション同士を連結する。ただし、重複するデータがある場合もそのまま連結する(Union Allのイメージ)。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/12/02 07:51
2018/12/02 10:43
退会済みユーザー
2018/12/02 12:12