回答編集履歴
7
コード修正
answer
CHANGED
@@ -47,7 +47,7 @@
|
|
47
47
|
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
|
48
48
|
return false;
|
49
49
|
|
50
|
-
return x.CD== y.CD && x.Name == y.Name;
|
50
|
+
return x.CD == y.CD && x.Name == y.Name;
|
51
51
|
}
|
52
52
|
|
53
53
|
public int GetHashCode(Person person)
|
6
コード修正&追記
answer
CHANGED
@@ -21,10 +21,51 @@
|
|
21
21
|
[Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得することで下記のように記述できます。エレガントかはわかりません。
|
22
22
|
```C#
|
23
23
|
var intersect = userPersonList.Intersect(ownerPersonList);
|
24
|
-
foreach(var user in
|
24
|
+
foreach(var user in intersect){
|
25
25
|
var owner = ownerPersonList.FirstOrDefault(x => x.CD == user.CD);
|
26
26
|
user.Name = owner?.Name;
|
27
27
|
}
|
28
28
|
```
|
29
29
|
|
30
|
-
IEqutable<TSource> を実装したくない場合は IEqualityComparer<TSource> を使っても実現できます。
|
30
|
+
IEqutable<TSource> を実装したくない場合は IEqualityComparer<TSource> を使っても実現できます。
|
31
|
+
|
32
|
+
### IEqualityComparer を使う場合
|
33
|
+
|
34
|
+
```C#
|
35
|
+
public class Person
|
36
|
+
{
|
37
|
+
public int CD;
|
38
|
+
public string Name;
|
39
|
+
}
|
40
|
+
|
41
|
+
public class PersonComparer : IEqualityComparer<Person>
|
42
|
+
{
|
43
|
+
public bool Equals(Person x, Person y)
|
44
|
+
{
|
45
|
+
if (Object.ReferenceEquals(x, y)) return true;
|
46
|
+
|
47
|
+
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
|
48
|
+
return false;
|
49
|
+
|
50
|
+
return x.CD== y.CD && x.Name == y.Name;
|
51
|
+
}
|
52
|
+
|
53
|
+
public int GetHashCode(Person person)
|
54
|
+
{
|
55
|
+
if (Object.ReferenceEquals(person, null)) return 0;
|
56
|
+
|
57
|
+
int hashPersonName = person.Name == null ? 0 : person.Name.GetHashCode();
|
58
|
+
int hashPersonCode = person.CD.GetHashCode();
|
59
|
+
|
60
|
+
return hashPersonName ^ hashPersonCode ;
|
61
|
+
}
|
62
|
+
}
|
63
|
+
```
|
64
|
+
|
65
|
+
```C#
|
66
|
+
var intersect = userPersonList.Intersect(ownerPersonList, new PersonComparer());
|
67
|
+
foreach(var user in intersect){
|
68
|
+
var owner = ownerPersonList.FirstOrDefault(x => x.CD == user.CD);
|
69
|
+
user.Name = owner?.Name;
|
70
|
+
}
|
71
|
+
```
|
5
コード修正
answer
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
```C#
|
23
23
|
var intersect = userPersonList.Intersect(ownerPersonList);
|
24
24
|
foreach(var user in userPersonList.Intersect(ownerPersonList)){
|
25
|
-
var owner = ownerPersonList.FirstOrDefault(x => x.CD ==
|
25
|
+
var owner = ownerPersonList.FirstOrDefault(x => x.CD == user.CD);
|
26
26
|
user.Name = owner?.Name;
|
27
27
|
}
|
28
28
|
```
|
4
文章の修正
answer
CHANGED
@@ -21,8 +21,9 @@
|
|
21
21
|
[Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得することで下記のように記述できます。エレガントかはわかりません。
|
22
22
|
```C#
|
23
23
|
var intersect = userPersonList.Intersect(ownerPersonList);
|
24
|
-
foreach(var
|
24
|
+
foreach(var user in userPersonList.Intersect(ownerPersonList)){
|
25
|
-
|
25
|
+
var owner = ownerPersonList.FirstOrDefault(x => x.CD == person.CD);
|
26
|
+
user.Name = owner?.Name;
|
26
27
|
}
|
27
28
|
```
|
28
29
|
|
3
文章の修正
answer
CHANGED
@@ -18,8 +18,7 @@
|
|
18
18
|
}
|
19
19
|
```
|
20
20
|
|
21
|
-
[Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得することで下記のように記述できます。
|
21
|
+
[Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得することで下記のように記述できます。エレガントかはわかりません。
|
22
|
-
エレガントかはわかりません。
|
23
22
|
```C#
|
24
23
|
var intersect = userPersonList.Intersect(ownerPersonList);
|
25
24
|
foreach(var person in intersect){
|
2
文章の修正
answer
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
}
|
19
19
|
```
|
20
20
|
|
21
|
-
[Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得
|
21
|
+
[Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得することで下記のように記述できます。
|
22
22
|
エレガントかはわかりません。
|
23
23
|
```C#
|
24
24
|
var intersect = userPersonList.Intersect(ownerPersonList);
|
@@ -27,4 +27,4 @@
|
|
27
27
|
}
|
28
28
|
```
|
29
29
|
|
30
|
-
IEqutable を実装したくない場合は IEqualityComparer を使っても実現できます。
|
30
|
+
IEqutable<TSource> を実装したくない場合は IEqualityComparer<TSource> を使っても実現できます。
|
1
積集合だった
answer
CHANGED
@@ -18,11 +18,11 @@
|
|
18
18
|
}
|
19
19
|
```
|
20
20
|
|
21
|
-
[Enumerable.
|
21
|
+
[Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得して下記のように記述できます。
|
22
22
|
エレガントかはわかりません。
|
23
23
|
```C#
|
24
|
-
var
|
24
|
+
var intersect = userPersonList.Intersect(ownerPersonList);
|
25
|
-
foreach(var person in
|
25
|
+
foreach(var person in intersect){
|
26
26
|
person.Name = ownerPersonList.FirstOrDefault(x => x.CD == person.CD)?.Name;
|
27
27
|
}
|
28
28
|
```
|