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

回答編集履歴

4

dictionary から空の要素を除外した

2017/05/20 12:41

投稿

hidori
hidori

スコア403

answer CHANGED
@@ -1,10 +1,6 @@
1
1
  ```C#
2
2
  void Main()
3
3
  {
4
- var dictionary = Enumerable.Range(0, 10)
5
- .Select(_ => new { Index = _, List = new List<int>() })
6
- .ToDictionary(_ => _.Index, _ => _.List);
7
-
8
4
  IEnumerable<int> Generate(int maxValue)
9
5
  {
10
6
  var random = new Random();
@@ -15,15 +11,17 @@
15
11
  }
16
12
  }
17
13
 
18
- foreach (var value in Generate(101))
14
+ var dictionary = Generate(101)
15
+ .Select(value =>
19
- {
16
+ {
20
- Console.WriteLine($"0~100の値を出力:{value}");
17
+ Console.WriteLine($"0~100の値を出力:{value}");
18
+ return value;
19
+ })
20
+ .TakeWhile(value => value != 0)
21
+ .GroupBy(value => value % 10)
22
+ .ToDictionary(_ => _.Key, _ => _.ToList());
21
23
 
22
- if (value == 0) break;
23
- dictionary[value % 10].Add(value);
24
- }
25
-
26
- foreach (var i in Enumerable.Range(0, 10))
24
+ foreach (var i in dictionary.Keys.OrderBy(_ => _))
27
25
  {
28
26
  Console.WriteLine($"一の位が{i} : {string.Join(" ", dictionary[i])}");
29
27
  }

3

List<int>\[\] を Dictionary<int, List<int>> に修正した

2017/05/20 12:41

投稿

hidori
hidori

スコア403

answer CHANGED
@@ -1,29 +1,31 @@
1
1
  ```C#
2
2
  void Main()
3
3
  {
4
+ var dictionary = Enumerable.Range(0, 10)
4
- var rows = Enumerable.Range(0, 10).Select(_ => new List<int>()).ToArray();
5
+ .Select(_ => new { Index = _, List = new List<int>() })
6
+ .ToDictionary(_ => _.Index, _ => _.List);
5
7
 
6
8
  IEnumerable<int> Generate(int maxValue)
7
9
  {
8
10
  var random = new Random();
9
-
11
+
10
12
  while (true)
11
13
  {
12
14
  yield return random.Next(maxValue);
13
15
  }
14
16
  }
15
-
17
+
16
18
  foreach (var value in Generate(101))
17
19
  {
18
20
  Console.WriteLine($"0~100の値を出力:{value}");
19
21
 
20
22
  if (value == 0) break;
21
- rows[value % 10].Add(value);
23
+ dictionary[value % 10].Add(value);
22
24
  }
23
25
 
24
- for (var i = 0; i < rows.Length; i++)
26
+ foreach (var i in Enumerable.Range(0, 10))
25
27
  {
26
- Console.WriteLine($"一の位が{i} : {string.Join(" ", rows[i].Select(v => v.ToString()))}");
28
+ Console.WriteLine($"一の位が{i} : {string.Join(" ", dictionary[i])}");
27
29
  }
28
30
  }
29
31
  ```

2

リファクタリングした

2017/05/20 07:02

投稿

hidori
hidori

スコア403

answer CHANGED
@@ -2,21 +2,28 @@
2
2
  void Main()
3
3
  {
4
4
  var rows = Enumerable.Range(0, 10).Select(_ => new List<int>()).ToArray();
5
-
6
- var random = new Random();
7
5
 
8
- while (true)
6
+ IEnumerable<int> Generate(int maxValue)
9
7
  {
8
+ var random = new Random();
9
+
10
+ while (true)
11
+ {
10
- var value = random.Next(101);
12
+ yield return random.Next(maxValue);
13
+ }
14
+ }
15
+
16
+ foreach (var value in Generate(101))
17
+ {
11
18
  Console.WriteLine($"0~100の値を出力:{value}");
12
-
19
+
13
20
  if (value == 0) break;
14
- rows[value - ((value / 10) * 10)].Add(value);
21
+ rows[value % 10].Add(value);
15
22
  }
16
23
 
17
- foreach (var row in rows.Select((v, i) => new { Index = i, Values = v }))
24
+ for (var i = 0; i < rows.Length; i++)
18
25
  {
19
- Console.WriteLine($"一の位が{row.Index} : {string.Join(" ", row.Values.Select(v => v.ToString()))}");
26
+ Console.WriteLine($"一の位が{i} : {string.Join(" ", rows[i].Select(v => v.ToString()))}");
20
27
  }
21
28
  }
22
29
  ```

1

values と Values が混在して見苦しいので改名した

2017/05/20 00:18

投稿

hidori
hidori

スコア403

answer CHANGED
@@ -1,7 +1,7 @@
1
1
  ```C#
2
2
  void Main()
3
3
  {
4
- var values = Enumerable.Range(0, 10).Select(_ => new List<int>()).ToArray();
4
+ var rows = Enumerable.Range(0, 10).Select(_ => new List<int>()).ToArray();
5
5
 
6
6
  var random = new Random();
7
7
 
@@ -11,10 +11,10 @@
11
11
  Console.WriteLine($"0~100の値を出力:{value}");
12
12
 
13
13
  if (value == 0) break;
14
- values[value - ((value / 10) * 10)].Add(value);
14
+ rows[value - ((value / 10) * 10)].Add(value);
15
15
  }
16
16
 
17
- foreach (var row in values.Select((v, i) => new { Index = i, Values = v }))
17
+ foreach (var row in rows.Select((v, i) => new { Index = i, Values = v }))
18
18
  {
19
19
  Console.WriteLine($"一の位が{row.Index} : {string.Join(" ", row.Values.Select(v => v.ToString()))}");
20
20
  }