web-dev-qa-db-ja.com

2つのlist <string>の違いを比較します

List<string>の2つのc#の違いを確認しようとしています。

例:

List<string> FirstList = new List<string>();
List<string> SecondList = new List<string>();

FirstListには次の値が入ります。

FirstList.Add("COM1");
FirstList.Add("COM2");

SecondListには次の値が入ります。

SecondList.Add("COM1");
SecondList.Add("COM2");
SecondList.Add("COM3");

次に、SecondListの一部の値がFirstListの値と等しいかどうかを確認します。

COM1とCOM2のような等しい値が両方のリストにある場合は、それらをリストからフィルタリングし、残りの値を別のリストに追加します。

したがって、新しいThirdListを作成すると、他の値が重複しているため、「COM3」のみが入力されます。

どうすればこのようなチェックを作成できますか?

15
Max

Except LINQ拡張メソッドを使用してみてください。これは、最初のリストからのみアイテムを取得し、2番目のリストには存在しないアイテムです。以下に例を示します。

List<string> ThirdList =  SecondList.Except(FirstList).ToList();

次のコードを使用して結果を印刷できます。

Console.WriteLine(string.Join(Environment.NewLine, ThirdList));

または

Debug.WriteLine(string.Join(Environment.NewLine, ThirdList));

注:含めることを忘れないでください:using System.Diagnostics;

プリント:

COM3
39
Ilya Ivanov

Enumerable.Intersect

var inBoth = FirstList.Intersect(SecondList);

または、両方のリストの1つだけにある文字列を検出するには、 Enumerable.Except

var inFirstOnly = FirstList.Except(SecondList);
var inSecondOnly = SecondList.Except(FirstList);

ThirdListを取得するには:

List<string> ThirdList = inSecondOnly.ToList();
16
Tim Schmelter

この王様のreuqirementよりも、Except関数を使用できます。

List<string> newlist =  List1.Except(List2).ToList();

またはこれを行うことができるので、以下の1つは、list1とlist2に共通していない項目を含む新しいリスト3を作成します

var common = List1.Intersect(List2);

var list3 = List1.Except(common ).ToList();
list3.AddRange(List2.Except(common ).ToList());

上記は、list1とlist2に次のような異なる項目がある場合に役立ちます

List<string> list1= new List<string>();
List<string> list2 = new List<string>();

FirstListには次の値が入力されます。

list1.Add("COM1");
list1.Add("COM2");
list1.Add("COM4");

SecondListには次の値が入力されます。

list2 .Add("COM1");
list2 .Add("COM2");
list2 .Add("COM3");

上記のコードを使用してlist3 contains COM4 and COM3.

5
Pranay Rana