回答編集履歴
6
一応コードも追加
answer
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
> 2つのListを突合し、1つ目のリストに足りない項目を2つ目のリストからAddして補完する
|
2
2
|
|
3
3
|
それは和集合なので、求めるには`LINQ`の[Union](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.union?view=netframework-4.8)を使ってください。
|
4
|
+
```diff
|
5
|
+
- agg1 = List_Comp(agg1, agg2);
|
6
|
+
+ agg1 = agg1.Union(agg2).ToList();
|
7
|
+
```
|
4
8
|
|
5
9
|
下記回答はZuishinさんに指摘される前の回答で、同じことが実現できますが、冗長的な実装です。
|
6
10
|
|
5
余談の追加
answer
CHANGED
@@ -14,4 +14,27 @@
|
|
14
14
|
//TODO:src,src2の初期化をする
|
15
15
|
|
16
16
|
src.AddRange(src2.Except(src));
|
17
|
+
```
|
18
|
+
|
19
|
+
----
|
20
|
+
#### 余談
|
21
|
+
|
22
|
+
hihijijiさんの回答には概ね同意で、本来は`dynamic`な型ではなく`ValueTuple`を使うかクラスを定義するべきと思いますが、[このような書き方](https://ufcpp.hatenadiary.org/entry/20071207/1197030259)をすることで匿名型の空リストを定義できるようです。
|
23
|
+
|
24
|
+
```C#
|
25
|
+
var agg1 = Enumerable.Range(0,0)
|
26
|
+
.Select(x => new
|
27
|
+
{
|
28
|
+
title = "",
|
29
|
+
result = new []
|
30
|
+
{
|
31
|
+
new
|
32
|
+
{
|
33
|
+
Choise = "",
|
34
|
+
Count = 0
|
35
|
+
}
|
36
|
+
}.ToList()
|
37
|
+
})
|
38
|
+
.ToList();
|
39
|
+
var agg2 = agg1.ToList();
|
17
40
|
```
|
4
誤字修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> 2つのListを突合し、1つ目のリストに足りない項目を2つ目のリストからAddして補完する
|
2
2
|
|
3
|
-
それは和集合な
|
3
|
+
それは和集合なので、求めるには`LINQ`の[Union](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.union?view=netframework-4.8)を使ってください。
|
4
4
|
|
5
5
|
下記回答はZuishinさんに指摘される前の回答で、同じことが実現できますが、冗長的な実装です。
|
6
6
|
|
3
文章の修正
answer
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
> 2つのListを突合し、1つ目のリストに足りない項目を2つ目のリストからAddして補完する
|
2
2
|
|
3
|
-
`LINQ`の[Union](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.union?view=netframework-4.8)を使ってください。
|
3
|
+
それは和集合なるので、求めるには`LINQ`の[Union](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.union?view=netframework-4.8)を使ってください。
|
4
4
|
|
5
|
-
|
5
|
+
下記回答はZuishinさんに指摘される前の回答で、同じことが実現できますが、冗長的な実装です。
|
6
6
|
|
7
7
|
----
|
8
8
|
二つの配列の差分は`LINQ`の[Except](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.except?view=netframework-4.8)を使うことで求めることができます。その差分を[AddRange](https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.list-1.addrange?view=netframework-4.8)で追加すれば解決です。
|
2
指摘内容の修正
answer
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
> 2つのListを突合し、1つ目のリストに足りない項目を2つ目のリストからAddして補完する
|
2
2
|
|
3
|
+
`LINQ`の[Union](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.union?view=netframework-4.8)を使ってください。
|
4
|
+
|
5
|
+
(下記コードはZuishinさんに指摘される前の回答で、同じことが実現できますが、冗長的な実装です。)
|
6
|
+
|
7
|
+
----
|
3
8
|
二つの配列の差分は`LINQ`の[Except](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.except?view=netframework-4.8)を使うことで求めることができます。その差分を[AddRange](https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.list-1.addrange?view=netframework-4.8)で追加すれば解決です。
|
4
9
|
|
5
10
|
```C#
|
@@ -9,22 +14,4 @@
|
|
9
14
|
//TODO:src,src2の初期化をする
|
10
15
|
|
11
16
|
src.AddRange(src2.Except(src));
|
12
|
-
```
|
13
|
-
|
14
|
-
関数化させたい場合はジェネリックを利用すると良いでしょう。
|
15
|
-
```C#
|
16
|
-
public static void AddExcepts<T>(List<T> src, IEnumerable<T> src2)
|
17
|
-
{
|
18
|
-
src.AddRange(src2.Except(src));
|
19
|
-
}
|
20
|
-
```
|
21
|
-
|
22
|
-
拡張メソッドとして利用する場合はこのような感じで使います。
|
23
|
-
```C#
|
24
|
-
public static class LINQExtension{
|
25
|
-
public static void AddExcepts<T>(this List<T> src, IEnumerable<T> src2)
|
26
|
-
{
|
27
|
-
src.AddRange(src2.Except(src));
|
28
|
-
}
|
29
|
-
}
|
30
17
|
```
|
1
コード修正
answer
CHANGED
@@ -8,14 +8,14 @@
|
|
8
8
|
|
9
9
|
//TODO:src,src2の初期化をする
|
10
10
|
|
11
|
-
src.AddRange(
|
11
|
+
src.AddRange(src2.Except(src));
|
12
12
|
```
|
13
13
|
|
14
14
|
関数化させたい場合はジェネリックを利用すると良いでしょう。
|
15
15
|
```C#
|
16
16
|
public static void AddExcepts<T>(List<T> src, IEnumerable<T> src2)
|
17
17
|
{
|
18
|
-
src.AddRange(
|
18
|
+
src.AddRange(src2.Except(src));
|
19
19
|
}
|
20
20
|
```
|
21
21
|
|
@@ -24,7 +24,7 @@
|
|
24
24
|
public static class LINQExtension{
|
25
25
|
public static void AddExcepts<T>(this List<T> src, IEnumerable<T> src2)
|
26
26
|
{
|
27
|
-
src.AddRange(
|
27
|
+
src.AddRange(src2.Except(src));
|
28
28
|
}
|
29
29
|
}
|
30
30
|
```
|