2012-03-14 8 views
1

私は2つのリストを比較しようとしています。あなたは助けてくれますか?2つのリストを比較する簡単な方法<String>リストをユニークな値に保ちます。

私が交差点を行う方法を知っているが、私は実際にそれはあなたが「そのリスト」によって何を意味するかは明らかではないのですが、私はあなたがExceptをしたいと思う反対

 //Example 
     List<String> baseListCopy = new List<String>(); 
     baseListCopy.Add("Test1"); 
     baseListCopy.Add("Test2"); 
     baseListCopy.Add("Test3"); 
     baseListCopy.Add("Test4"); 
     baseListCopy.Add("Test5"); 
     baseListCopy.Add("Test6"); 
     baseListCopy.Add("Test7"); 
     baseListCopy.Add("Test8"); 
     baseListCopy.Add("Test9"); 

     List<String> resultListCopy = new List<String>(); 
     resultListCopy.Add("Test1"); 
     resultListCopy.Add("Test2"); 
     resultListCopy.Add("Test3"); 
     resultListCopy.Add("Test40"); 
     resultListCopy.Add("Test90"); 

     //returns only items that are present on both lists 
     resultListCopy = baseListCopy.Intersect(resultListCopy, StringComparer.InvariantCultureIgnoreCase).ToList(); 

     //How do I return only items that are unique to that list? 
+2

『リストのいずれにも表示されない項目は』:それはたくさんのです文字列... –

答えて

2

ないresultListCopyに含まれているすべての結果を取得するには:

resultListCopy = baseListCopy.Except(resultListCopy, StringComparer.InvariantCultureIgnoreCase) 
          .ToList(); 
3

を実行する必要があります。

// Just to avoid scrolling :) 
var comparer = StringComparer.InvariantCultureIgnoreCase; 
var baseListOnly = baseListCopy.Except(resultListCopy, comparer) 
           .ToList(); 

コレクションイニシャライザを使用してリストをより簡単に取り込むことができます。

List<String> baseListCopy = new List<String> { 
    "Test1", "Test2", "Test3", 
    "Test4", ... 
}; 

あなたが実際に正確に一つのリストにあるアイテムの後している場合は、SLaks'答えの別の代替はHashSet<T>.SymmetricExceptWithを使用することです:

var hashSet = new HashSet<string>(baseListCopy, 
            StringComparer.InvariantCultureIgnoreCase); 
// This mutates the set 
hashSet.SymmetricExceptWith(resultListCopy); 
7

あなたの質問は不明です。あなたは正確に一つのリストに表示されるすべての項目(XOR)をしたいよう

に聞こえる:

あなたが交差点を取るとしているベースからそれぞれの値を削除し、それを反復処理していないのはなぜ
a.Union(b).Except(a.Intersect(b)) 
1

交差点。試してみてください:

resultListCopy = baseListCopy.Intersect(resultListCopy, StringComparer.InvariantCultureIgnoreCase).ToList(); 
resultList = new List<String>(); 
foreach (string s in resultListCopy) 
{ 
    if (!baseListCopy.contains(s)) 
     resultList.add(s); 
} 

resultListCopyと基本リストがスワップされている場合は、それが意味していました。

+0

こんにちは、実際に私はこれをやったが、少ないコードでよりエレガントにしたいと思っていました。 @BrokenGlassは私に必要なものを実際に私にくれました。 – Andrew

1

SLaks'ポストへのわずかな変種:

var finalListCopy = 
    baseListCopy.Except(resultListCopy).Union(resultListCopy.Except(baseListCopy)); 

二exceptsでは、連合に参加しましたが...:D

関連する問題