38

重複の可能性:
LINQ は 2 つのリストの違いを見つける

2つのシリーズの違いを見つけたいです。だから私はExceptLINQステートメントで使用しています。しかしExcept、最初のコレクションが 2 番目のコレクションよりも長い場合にのみ機能するようです。たとえば、2 つのコレクションが異なっていても、結果は返されません。

double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
double[] numbers2 = { 2.2 };

IEnumerable<double> onlyInFirstSet = numbers2.Except(numbers1);

これが事実であるかどうか誰でも確認できますか?その場合、コンパイル時にどのコレクションが大きくなるかわからないため、クエリを作成する前にコレクションの長さを確認する必要がありますか。

編集

私は私の質問で明確ではなかったと思います。どのコレクションに何が含まれているかは気にしません。2つのコレクションの違いを見つけたいだけです。これどうやってするの?

4

3 に答える 3

61

101 の LINQ サンプルから取得:

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 

IEnumerable<int> aOnlyNumbers = numbersA.Except(numbersB); 

Console.WriteLine("Numbers in first array but not second array:"); 
foreach (var n in aOnlyNumbers) 
{ 
    Console.WriteLine(n); 
}

結果

2 番目の配列ではなく 1 番目の配列の数値: 0 2 4 6 9

于 2012-09-18T15:05:45.883 に答える
11

たとえば、これは結果を返しません...

そのとおりです。

2.2最初のコレクションに存在するため、返すものはありません。

配列の長さとは関係ありません。

于 2012-09-18T15:05:34.823 に答える
7

他の答えは、別のセットから数字のセットを削除する方法を示しています。あなたの質問を読んで私はあなたが最初にあるが2番目にはないものが欲しいと思います、そしてその逆:

var numbers1 = new [] { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
var numbers2 = new [] { 2.2, 2.8 };

var intersect = numbers1.Intersect(numbers2);
var diff = numbers1.Concat(numbers2).Except(intersect);
于 2012-09-18T15:25:02.520 に答える