回答編集履歴
11
文章構成の訂正その2
answer
CHANGED
@@ -8,7 +8,9 @@
|
|
8
8
|
int max = z.Where(item => item["NO1"] == "AAA").Max(item => int.Parse(item["NUM"]));
|
9
9
|
```
|
10
10
|
|
11
|
-
Dictionary型の要素自体を取り出したい場合は
|
11
|
+
Dictionary型の要素自体を取り出したい場合は少し変則的になります。
|
12
|
+
NUMが最大値の要素を取得するには`OrderByDescending`メソッドを使います。
|
13
|
+
シーケンスをソートして先頭の要素を取ってくることで最大値を含む要素を検索します。
|
12
14
|
```C#
|
13
15
|
var values = new[] {
|
14
16
|
new {No1="AAA", No2="DDD", NUM=500},
|
@@ -30,9 +32,6 @@
|
|
30
32
|
Console.WriteLine(value.No2); // => EEE
|
31
33
|
```
|
32
34
|
|
33
|
-
NUMが最大値の要素を取得するには`OrderByDescending`メソッドを使います。
|
34
|
-
シーケンスをソートして先頭の要素を取ってくることで最大値を含む要素を検索します。
|
35
|
-
|
36
35
|
最大値を含む要素をNo1の値毎に取得したい場合には`GroupBy`メソッドを使うと良いでしょう。
|
37
36
|
```C#
|
38
37
|
var values = new[] {
|
10
文章校正の訂正その2
answer
CHANGED
File without changes
|
9
文章校正の訂正
answer
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
※まず第一に、List<Dictionary<string, string>>の形式を止めた方が良いとは思いますが…時間があればクラスにしましょう
|
2
2
|
|
3
3
|
値のみを取得する場合にはozwkさんが前述されているように`Max`メソッドを使用しましょう。
|
4
|
+
まず、`Where`メソッドでNo1がAAAの要素に絞り込みます。
|
5
|
+
次に、`Max`メソッドで何の値の最大値を取得するかをデリゲートで指定します。
|
6
|
+
|
4
7
|
```C#
|
5
8
|
int max = z.Where(item => item["NO1"] == "AAA").Max(item => int.Parse(item["NUM"]));
|
6
9
|
```
|
@@ -27,8 +30,7 @@
|
|
27
30
|
Console.WriteLine(value.No2); // => EEE
|
28
31
|
```
|
29
32
|
|
30
|
-
まず、`Where`メソッドでNo1がAAAの要素に絞り込みます。
|
31
|
-
NUMが最大値の要素を取得するには`OrderByDescending`メソッドを使
|
33
|
+
NUMが最大値の要素を取得するには`OrderByDescending`メソッドを使います。
|
32
34
|
シーケンスをソートして先頭の要素を取ってくることで最大値を含む要素を検索します。
|
33
35
|
|
34
36
|
最大値を含む要素をNo1の値毎に取得したい場合には`GroupBy`メソッドを使うと良いでしょう。
|
8
表現を訂正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
※まず第一に、List<Dictionary<string, string>>の形式を止めた方が良いとは思いますが…時間があればクラスにしましょう
|
2
2
|
|
3
|
-
値
|
3
|
+
値のみを取得する場合にはozwkさんが前述されているように`Max`メソッドを使用しましょう。
|
4
4
|
```C#
|
5
5
|
int max = z.Where(item => item["NO1"] == "AAA").Max(item => int.Parse(item["NUM"]));
|
6
6
|
```
|
7
ozwkさんの説明に対する追記
answer
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
※まず第一に、List<Dictionary<string, string>>の形式を止めた方が良いとは思いますが…時間があればクラスにしましょう
|
2
2
|
|
3
3
|
値だけで十分であればozwkさんが前述されているように`Max`メソッドを使用しましょう。
|
4
|
+
```C#
|
5
|
+
int max = z.Where(item => item["NO1"] == "AAA").Max(item => int.Parse(item["NUM"]));
|
6
|
+
```
|
7
|
+
|
4
8
|
Dictionary型の要素自体を取り出したい場合は以下のようにすれば良いでしょう。
|
5
9
|
```C#
|
6
10
|
var values = new[] {
|
6
訂正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
※まず第一に、List<Dictionary<string, string>>の形式を止めた方が良いとは思いますが…時間があればクラスにしましょう
|
2
2
|
|
3
|
-
値だけで十分であればozwkさんが前述されているように`Max`メソッドを使用
|
3
|
+
値だけで十分であればozwkさんが前述されているように`Max`メソッドを使用しましょう。
|
4
4
|
Dictionary型の要素自体を取り出したい場合は以下のようにすれば良いでしょう。
|
5
5
|
```C#
|
6
6
|
var values = new[] {
|
5
追記
answer
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
※まず第一に、List<Dictionary<string, string>>の形式を止めた方が良いとは思いますが…時間があればクラスにしましょう
|
2
2
|
|
3
|
+
値だけで十分であればozwkさんが前述されているように`Max`メソッドを使用するだけで十分です。
|
3
|
-
|
4
|
+
Dictionary型の要素自体を取り出したい場合は以下のようにすれば良いでしょう。
|
4
5
|
```C#
|
5
6
|
var values = new[] {
|
6
7
|
new {No1="AAA", No2="DDD", NUM=500},
|
4
Dictionary型にあわせてコメントを追加
answer
CHANGED
@@ -14,6 +14,11 @@
|
|
14
14
|
.OrderByDescending(x => x.NUM)
|
15
15
|
.FirstOrDefault();
|
16
16
|
|
17
|
+
// Dictionary型の場合以下のようになります
|
18
|
+
// values.Where(x => x["NO1"] == "AAA")
|
19
|
+
// .OrderByDescending(x => int.Parse(x["NUM"]))
|
20
|
+
// .FirstOrDefault();
|
21
|
+
|
17
22
|
Console.WriteLine(value.No2); // => EEE
|
18
23
|
```
|
19
24
|
|
3
追記の改善
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
※まず第一に、List<Dictionary<string,
|
1
|
+
※まず第一に、List<Dictionary<string, string>>の形式を止めた方が良いとは思いますが…時間があればクラスにしましょう
|
2
2
|
|
3
3
|
No1の値毎に1回ずつLinqを実行する場合は以下のようにすれば良いでしょう。
|
4
4
|
```C#
|
2
最初の1文を追記
answer
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
※まず第一に、List<Dictionary<string, T>>の形式を止めた方が良いとは思いますが
|
2
|
+
|
1
3
|
No1の値毎に1回ずつLinqを実行する場合は以下のようにすれば良いでしょう。
|
2
4
|
```C#
|
3
5
|
var values = new[] {
|
1
語彙の変更
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
new {No1="BBB", No2="GGG", NUM=200},
|
8
8
|
};
|
9
9
|
|
10
|
-
// No1を"AAA"で絞り込み、NUMを降順に並べ替えてからその先頭の
|
10
|
+
// No1を"AAA"で絞り込み、NUMを降順に並べ替えてからその先頭の要素1つを得る
|
11
11
|
var value = values.Where(x => x.No1 == "AAA")
|
12
12
|
.OrderByDescending(x => x.NUM)
|
13
13
|
.FirstOrDefault();
|
@@ -15,11 +15,11 @@
|
|
15
15
|
Console.WriteLine(value.No2); // => EEE
|
16
16
|
```
|
17
17
|
|
18
|
-
まず、`Where`メソッドでNo1がAAAの
|
18
|
+
まず、`Where`メソッドでNo1がAAAの要素に絞り込みます。
|
19
|
-
NUMが最大値の
|
19
|
+
NUMが最大値の要素を取得するには`OrderByDescending`メソッドを使えばよいでしょう。
|
20
|
-
|
20
|
+
シーケンスをソートして先頭の要素を取ってくることで最大値を含む要素を検索します。
|
21
21
|
|
22
|
-
|
22
|
+
最大値を含む要素をNo1の値毎に取得したい場合には`GroupBy`メソッドを使うと良いでしょう。
|
23
23
|
```C#
|
24
24
|
var values = new[] {
|
25
25
|
new {No1="AAA", No2="DDD", NUM=500},
|
@@ -35,9 +35,9 @@
|
|
35
35
|
|
36
36
|
// 1. GroupByを使ってNo1の値毎に個別のシーケンスに変換します
|
37
37
|
// 2. シーケンスをNUMの値で降順に並べ替えます
|
38
|
-
var result = values.GroupBy(
|
38
|
+
var result = values.GroupBy(x => x.No1)
|
39
|
-
.Select(
|
39
|
+
.Select(g =>
|
40
|
-
|
40
|
+
g.OrderByDescending(x => x.NUM)
|
41
41
|
.First());
|
42
42
|
|
43
43
|
foreach (var value in result)
|
@@ -52,8 +52,9 @@
|
|
52
52
|
```
|
53
53
|
|
54
54
|
---
|
55
|
+
|
55
56
|
蛇足ですが、パフォーマンスを考えるとDBのSELECT文を変える方が良いこともあります。
|
56
|
-
|
57
|
+
より良いものを選択してください。
|
57
58
|
```SQL
|
58
59
|
SELECT * FROM db a
|
59
60
|
WHERE a.num = (SELECT MAX(num) FROM DB b WHERE a.NO1=b.NO1)
|