回答編集履歴

1

追記

2019/07/10 09:01

投稿

fana
fana

スコア11658

test CHANGED
@@ -7,3 +7,71 @@
7
7
  (最初にNameでソートしていいならNameが同じ範囲が探しやすくて楽かな.)
8
8
 
9
9
  …という話ではないのでしょうか.
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
17
+ > 具体的にはgrou_byとselect newメソッドをLinqを使わずに表現したいです。
18
+
19
+
20
+
21
+ 2つの処理を分けて書かないといけないのかな?
22
+
23
+ とりあえず超てきとーだけど,こんなもんを書けば良いのだろうか?
24
+
25
+ ```
26
+
27
+ static Dictionary<string,List<Food>> TheGroupByName( IEnumerable<Food> Src )
28
+
29
+ {
30
+
31
+ var Ret = new Dictionary<string,List<Food>>();
32
+
33
+ foreach( var S in Src )
34
+
35
+ {
36
+
37
+ if( !Ret.ContainsKey( S.Name ) ){ Ret.Add( S.Name, new List<Food>() ); }
38
+
39
+ Ret[ S.Name ].Add( new Food(){ Name = S.Name, Amount = S.Amount } );
40
+
41
+ }
42
+
43
+ return Ret;
44
+
45
+ }
46
+
47
+
48
+
49
+ static List<Food> TheSelectSumAmount( Dictionary<string,List<Food>> Grouped )
50
+
51
+ {
52
+
53
+ var Ret = new List<Food>( Grouped.Keys.Count );
54
+
55
+ foreach( var G in Grouped )
56
+
57
+ {
58
+
59
+ decimal SumAmount = 0;
60
+
61
+ foreach( var S in G.Value ){ SumAmount += S.Amount; }
62
+
63
+ Ret.Add( new Food(){ Name=G.Key, Amount=SumAmount } );
64
+
65
+ }
66
+
67
+ return Ret;
68
+
69
+ }
70
+
71
+
72
+
73
+ //使う側
74
+
75
+ var Result = TheSelectSumAmount( TheGroupByName( foods ) );
76
+
77
+ ```