teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2019/07/10 09:01

投稿

fana
fana

スコア12229

answer CHANGED
@@ -2,4 +2,38 @@
2
2
  存在する場合には,そいつのAmountにx番目の要素のAmountを加算して,x番目の要素を捨てる
3
3
  ということを適当なループを書いてやれば良い
4
4
  (最初にNameでソートしていいならNameが同じ範囲が探しやすくて楽かな.)
5
- …という話ではないのでしょうか.
5
+ …という話ではないのでしょうか.
6
+
7
+ ---
8
+
9
+ > 具体的にはgrou_byとselect newメソッドをLinqを使わずに表現したいです。
10
+
11
+ 2つの処理を分けて書かないといけないのかな?
12
+ とりあえず超てきとーだけど,こんなもんを書けば良いのだろうか?
13
+ ```
14
+ static Dictionary<string,List<Food>> TheGroupByName( IEnumerable<Food> Src )
15
+ {
16
+ var Ret = new Dictionary<string,List<Food>>();
17
+ foreach( var S in Src )
18
+ {
19
+ if( !Ret.ContainsKey( S.Name ) ){ Ret.Add( S.Name, new List<Food>() ); }
20
+ Ret[ S.Name ].Add( new Food(){ Name = S.Name, Amount = S.Amount } );
21
+ }
22
+ return Ret;
23
+ }
24
+
25
+ static List<Food> TheSelectSumAmount( Dictionary<string,List<Food>> Grouped )
26
+ {
27
+ var Ret = new List<Food>( Grouped.Keys.Count );
28
+ foreach( var G in Grouped )
29
+ {
30
+ decimal SumAmount = 0;
31
+ foreach( var S in G.Value ){ SumAmount += S.Amount; }
32
+ Ret.Add( new Food(){ Name=G.Key, Amount=SumAmount } );
33
+ }
34
+ return Ret;
35
+ }
36
+
37
+ //使う側
38
+ var Result = TheSelectSumAmount( TheGroupByName( foods ) );
39
+ ```