回答編集履歴
2
ソース内のコメントを修正
answer
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
webとlocalの双方から余分な要素を取得する事まで考慮するならば、和集合と積集合の差集合である排他的論理和をLinqで以下のように求められます。
|
2
2
|
※webにtest6を追加して実行するとtest4, test5, test6を返します
|
3
3
|
```c#
|
4
|
-
var union = local.Union(web, person => person.Name); //
|
4
|
+
var union = local.Union(web, person => person.Name); //和集合
|
5
|
-
var intersect = local.Intersect(web, person => person.Name); //
|
5
|
+
var intersect = local.Intersect(web, person => person.Name); //積集合
|
6
6
|
var diffList = union.Except(intersect, person => person.Name); //和集合と積集合の差集合
|
7
7
|
```
|
8
|
-
ここで第2引数は既出の通りIEqualityComparer<T>なのですが、自前で作るのは面倒なので
|
8
|
+
ここで第2引数は既出の通りIEqualityComparer<T>なのですが、自前で作るのは面倒なのでneueccさん作成の[AnonymousComparer](https://www.nuget.org/packages/AnonymousComparer/)の利用がお薦めです。
|
9
9
|
AnonymousComparerの拡張メソッドによりラムダ式で簡単に記述できます。
|
1
コードハイライトをC#に変更
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
webとlocalの双方から余分な要素を取得する事まで考慮するならば、和集合と積集合の差集合である排他的論理和をLinqで以下のように求められます。
|
2
2
|
※webにtest6を追加して実行するとtest4, test5, test6を返します
|
3
|
-
```
|
3
|
+
```c#
|
4
4
|
var union = local.Union(web, person => person.Name); //積集合
|
5
5
|
var intersect = local.Intersect(web, person => person.Name); //和集合
|
6
6
|
var diffList = union.Except(intersect, person => person.Name); //和集合と積集合の差集合
|