2011-02-10 16 views
6

私は2つのリストを持ち、そのうちの1つに5つの要素があり、もう1つに4つの要素があります。彼らはいくつかの同じ要素を持っていますが、要素も異なっています。私はそれらの異なる要素でリストを作成したいと思います。どうすればいいですか?linqで2つのリストの項目を比較する方法はありますか?

注:5要素リストは私の主要なリストです。

+0

[Linqは2つのリストの相違点を見つけました](http://stackoverflow.com/questions/2404301/linq-find-differences-in-two-lists) – AakashM

答えて

16

これはどうですか?この場合

var list1 = new List<int>(new []{1,2,3,4,5}); 
var list2 = new List<int>(new []{1,3,4}); 
var list3 = list1.Except(list2); 

list3 2及び5のみを含むであろう。

EDIT

あなたがユニークである両方のセットからの要素をしたい場合は、次のコードは十分です:

var list1 = new List<int>(new []{1,2,3,4,5}); 
var list2 = new List<int>(new []{1,3,4,7}); 
var list3 = list1.Except(list2).Union(list2.Except(list1)); 

ウィル出力2,5および7

+0

すごく純粋です。ありがとう – cagin

+0

これは実際のセットの違いではありません - シーケンス1のアイテムもシーケンス2に含まれているアイテムを除外するだけです(シーケンス1にないアイテムはシーケンス2に含まれません)。 –

+0

Jason's answer in AakashMによる[質問のコメントで提供されるリンク](http://stackoverflow.com/questions/2404301/linq-find-differences-in-two-lists)は真の双方向セット差を生み出す方法を提供します。 –

1

あなたの場合不思議なことに、これの反対はと呼ばれます。交差点

string[] collection1 = new string[] { "1", "7", "4" }; 
string[] collection2 = new string[] { "6", "1", "7" }; 

var resultSet = collection1.Intersect<string>(collection2); 

foreach (string s in resultSet) 
{ 
    Console.WriteLine(s); 
} 
関連する問題