回答編集履歴

2

別手法

2016/12/28 01:35

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -121,3 +121,13 @@
121
121
  }
122
122
 
123
123
  ```
124
+
125
+
126
+
127
+ 例えば、
128
+
129
+ 0. Numberでグルーピングする。
130
+
131
+ 0. 各グループが0と1の両方を含むかいい感じにフィルタ
132
+
133
+ 0. 結果のKey(=Number)を抽出

1

コード例

2016/12/28 01:35

投稿

ozwk
ozwk

スコア13528

test CHANGED
@@ -9,3 +9,115 @@
9
9
  0. Flag0グループとFlag1グループの積集合をとる。
10
10
 
11
11
  0. その結果がOKなNumberの集合。
12
+
13
+
14
+
15
+
16
+
17
+ やっつけで作った:
18
+
19
+
20
+
21
+ ```C#
22
+
23
+ using System;
24
+
25
+ using System.Linq;
26
+
27
+
28
+
29
+ public class Test
30
+
31
+ {
32
+
33
+ public static void Main()
34
+
35
+ {
36
+
37
+ var source = new[]{
38
+
39
+ new Element{Number = 1000,Flag = 0},
40
+
41
+ new Element{Number = 1000,Flag = 1},
42
+
43
+ new Element{Number = 1001,Flag = 0},
44
+
45
+ new Element{Number = 1001,Flag = 1},
46
+
47
+ new Element{Number = 1002,Flag = 0},
48
+
49
+ new Element{Number = 1002,Flag = 0},
50
+
51
+ new Element{Number = 1002,Flag = 1},
52
+
53
+ new Element{Number = 1003,Flag = 0},
54
+
55
+ new Element{Number = 1003,Flag = 1},
56
+
57
+ new Element{Number = 1003,Flag = 1},
58
+
59
+ new Element{Number = 1004,Flag = 0},
60
+
61
+ new Element{Number = 1005,Flag = 0},
62
+
63
+ new Element{Number = 1005,Flag = 1},
64
+
65
+ new Element{Number = 1006,Flag = 0},
66
+
67
+ };
68
+
69
+
70
+
71
+ var group = source.Distinct().GroupBy(e => e.Flag, e => e.Number);
72
+
73
+ var ones = group.Where(g => g.Key == 1).SelectMany(x => x);
74
+
75
+ var zeros = group.Where(g => g.Key == 0).SelectMany(x => x);
76
+
77
+ var whole = group.SelectMany(x => x);
78
+
79
+
80
+
81
+ var ok = ones.Intersect(zeros);
82
+
83
+ var ng = whole.Except(ok);
84
+
85
+
86
+
87
+
88
+
89
+ Console.WriteLine("==========ok===========");
90
+
91
+ foreach (var x in ok)
92
+
93
+ Console.WriteLine(x);
94
+
95
+
96
+
97
+ Console.WriteLine("==========ng===========");
98
+
99
+
100
+
101
+ foreach (var x in ng)
102
+
103
+ Console.WriteLine(x);
104
+
105
+
106
+
107
+ }
108
+
109
+ }
110
+
111
+
112
+
113
+ public struct Element
114
+
115
+ {
116
+
117
+ public int Number;
118
+
119
+ public int Flag;
120
+
121
+ }
122
+
123
+ ```