回答編集履歴

7

コード修正

2021/03/30 11:56

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -96,7 +96,7 @@
96
96
 
97
97
 
98
98
 
99
- return x.CD== y.CD && x.Name == y.Name;
99
+ return x.CD == y.CD && x.Name == y.Name;
100
100
 
101
101
  }
102
102
 

6

コード修正&追記

2021/03/30 11:56

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  var intersect = userPersonList.Intersect(ownerPersonList);
46
46
 
47
- foreach(var user in userPersonList.Intersect(ownerPersonList)){
47
+ foreach(var user in intersect){
48
48
 
49
49
  var owner = ownerPersonList.FirstOrDefault(x => x.CD == user.CD);
50
50
 
@@ -57,3 +57,85 @@
57
57
 
58
58
 
59
59
  IEqutable<TSource> を実装したくない場合は IEqualityComparer<TSource> を使っても実現できます。
60
+
61
+
62
+
63
+ ### IEqualityComparer を使う場合
64
+
65
+
66
+
67
+ ```C#
68
+
69
+ public class Person
70
+
71
+ {
72
+
73
+ public int CD;
74
+
75
+ public string Name;
76
+
77
+ }
78
+
79
+
80
+
81
+ public class PersonComparer : IEqualityComparer<Person>
82
+
83
+ {
84
+
85
+ public bool Equals(Person x, Person y)
86
+
87
+ {
88
+
89
+ if (Object.ReferenceEquals(x, y)) return true;
90
+
91
+
92
+
93
+ if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
94
+
95
+ return false;
96
+
97
+
98
+
99
+ return x.CD== y.CD && x.Name == y.Name;
100
+
101
+ }
102
+
103
+
104
+
105
+ public int GetHashCode(Person person)
106
+
107
+ {
108
+
109
+ if (Object.ReferenceEquals(person, null)) return 0;
110
+
111
+
112
+
113
+ int hashPersonName = person.Name == null ? 0 : person.Name.GetHashCode();
114
+
115
+ int hashPersonCode = person.CD.GetHashCode();
116
+
117
+
118
+
119
+ return hashPersonName ^ hashPersonCode ;
120
+
121
+ }
122
+
123
+ }
124
+
125
+ ```
126
+
127
+
128
+
129
+ ```C#
130
+
131
+ var intersect = userPersonList.Intersect(ownerPersonList, new PersonComparer());
132
+
133
+ foreach(var user in intersect){
134
+
135
+ var owner = ownerPersonList.FirstOrDefault(x => x.CD == user.CD);
136
+
137
+ user.Name = owner?.Name;
138
+
139
+ }
140
+
141
+ ```

5

コード修正

2021/03/30 11:55

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  foreach(var user in userPersonList.Intersect(ownerPersonList)){
48
48
 
49
- var owner = ownerPersonList.FirstOrDefault(x => x.CD == person.CD);
49
+ var owner = ownerPersonList.FirstOrDefault(x => x.CD == user.CD);
50
50
 
51
51
  user.Name = owner?.Name;
52
52
 

4

文章の修正

2021/03/30 11:42

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -44,9 +44,11 @@
44
44
 
45
45
  var intersect = userPersonList.Intersect(ownerPersonList);
46
46
 
47
- foreach(var person in intersect){
47
+ foreach(var user in userPersonList.Intersect(ownerPersonList)){
48
48
 
49
- person.Name = ownerPersonList.FirstOrDefault(x => x.CD == person.CD)?.Name;
49
+ var owner = ownerPersonList.FirstOrDefault(x => x.CD == person.CD);
50
+
51
+ user.Name = owner?.Name;
50
52
 
51
53
  }
52
54
 

3

文章の修正

2021/03/30 11:41

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -38,9 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- [Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得することで下記のように記述できます。
41
+ [Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得することで下記のように記述できます。エレガントかはわかりません。
42
-
43
- エレガントかはわかりません。
44
42
 
45
43
  ```C#
46
44
 

2

文章の修正

2021/03/30 11:39

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- [Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得して下記のように記述できます。
41
+ [Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の積集合を取得することで下記のように記述できます。
42
42
 
43
43
  エレガントかはわかりません。
44
44
 
@@ -56,4 +56,4 @@
56
56
 
57
57
 
58
58
 
59
- IEqutable を実装したくない場合は IEqualityComparer を使っても実現できます。
59
+ IEqutable<TSource> を実装したくない場合は IEqualityComparer<TSource> を使っても実現できます。

1

積集合だった

2021/03/30 11:39

投稿

BluOxy
BluOxy

スコア2663

test CHANGED
@@ -38,15 +38,15 @@
38
38
 
39
39
 
40
40
 
41
- [Enumerable.Union](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.union?view=net-5.0) メソッドで userPersonList の集合を取得して下記のように記述できます。
41
+ [Enumerable.Intersect](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.intersect?view=net-5.0) メソッドで userPersonList の集合を取得して下記のように記述できます。
42
42
 
43
43
  エレガントかはわかりません。
44
44
 
45
45
  ```C#
46
46
 
47
- var union = userPersonList.Union(ownerPersonList);
47
+ var intersect = userPersonList.Intersect(ownerPersonList);
48
48
 
49
- foreach(var person in union){
49
+ foreach(var person in intersect){
50
50
 
51
51
  person.Name = ownerPersonList.FirstOrDefault(x => x.CD == person.CD)?.Name;
52
52