狠狠撸
Submit Search
知って得するC# LINQ to Objects編
?
21 likes
?
12,925 views
Shota Baba
Follow
1 of 50
Download now
Downloaded 63 times
More Related Content
知って得するC# LINQ to Objects編
1.
知って得する C# LINQ to Objects編 株式会社ハ?ン?ド プログラマ 馬場翔太 http://baba-s.hatenablog.com/
2.
スライド内容 1. LINQ to
Objectsとは 2. LINQ to Objectsの使用例
3.
LINQ to Objectsとは
4.
コレクションを扱うための新しい方法 for文やforeach文を使わず下記の様な処理が行えます ? 条件を満たす要素の数を取得 ? 条件を満たす要素を抽出 ?
条件を満たす最初の要素を取得 ? 昇順にソート ? etc.
5.
LINQ to Objectsを使うために必要なこと using
System.Linq; この一行をソースコードの先頭に追加するだけです
6.
「using System.Linq;」を追加すると… 配列やリストで多くの拡張メソッドが使用可能になります ? Count ?
Where ? First ? OrderBy ? etc. 次のスライドから順番に紹介していきます
7.
LINQ to Objectsの使用例
8.
条件を満たす要素の数を取得する 従来のコーディング // 兵士の数を取得します var result
= 0; foreach (var character in characters) { if (character.Job == "Soldier") { result++; } }
9.
条件を満たす要素の数を取得する Countメソッドを使用 // 兵士の数を取得します var result
= characters.Count(c => c.Job == "Soldier");
10.
条件を満たす要素を抽出する 従来のコーディング // 兵士のみ取得します var result
= new List<Character>(); foreach (var character in characters) { if (character.Job == "Soldier") { result.Add(character); } }
11.
条件を満たす要素を抽出する Whereメソッドを使用 // 兵士のみ取得します var result
= characters.Where(c => c.Job == "Soldier");
12.
要素を射影する 従来のコーディング // すべてのキャラクターから名前だけ取得します var result
= new List<string>(); foreach (var character in characters) { result.Add(character.Name); }
13.
要素を射影する Selectメソッドを使用 // すべてのキャラクターから名前だけ取得します var result
= characters.Select(c => c.Name);
14.
すべての要素が条件を満たしているか 従来のコーディング // 全員が兵士かどうかを判断します var result
= true; foreach (var character in characters) { if (character.Job != "Soldier") { result = false; break; } }
15.
すべての要素が条件を満たしているか Allメソッドを使用 // 全員が兵士かどうかを判断します var result
= characters.All(c => c.Job == "Soldier");
16.
いずれかの要素が条件を満たしているか 従来のコーディング // 兵士が存在するかどうかを取得します var result
= false; foreach (var character in characters) { if (character.Job == "Soldier") { result = true; break; } }
17.
いずれかの要素が条件を満たしているか Anyメソッドを使用 // 兵士が存在するかどうかを取得します var result
= characters.Any(c => c.Job == "Soldier");
18.
条件を満たす最初の要素を取得する 従来のコーディング // 先頭の兵士を取得します Character result
= null; foreach (var character in characters) { if (character.Job == "Soldier") { result = character; break; } }
19.
条件を満たす最初の要素を取得する Firstメソッドを使用 (条件を満たす要素がない場合は例外になります) // 先頭の兵士を取得します var result
= characters.First(c => c.Job == "Soldier");
20.
条件を満たす最初の要素を取得する FirstOrDefaultメソッドを使用 (条件を満たす要素がない場合は既定値を返します) // 先頭の兵士を取得します var result
= characters.FirstOrDefault(c => c.Job == "Soldier");
21.
条件を満たす最後の要素を取得する 従来のコーディング // 末尾の兵士を取得します Character result
= null; for (int i = characters.Length - 1; i >= 0; i--) { if (characters[i].Job == "Soldier") { result = characters[i]; break; } }
22.
条件を満たす最後の要素を取得する Lastメソッドを使用 (条件を満たす要素がない場合は例外になります) // 末尾の兵士を取得します var result
= characters.Last(c => c.Job == "Soldier");
23.
条件を満たす最後の要素を取得する LastOrDefaultメソッドを使用 (条件を満たす要素がない場合は既定値を返します) // 末尾の兵士を取得します var result
= characters.LastOrDefault(c => c.Job == "Soldier");
24.
最後の要素を取得する 従来のコーディング var result =
characters[characters.Length - 1]; Lastメソッドを使用 var result = characters.Last();
25.
最大値を取得する 従来のコーディング // すべてのキャラクターの中で // 最も大きな力のパラメータを取得します var
result = 0; foreach (var character in characters) { if (result < character.Power) { result = character.Power; } }
26.
最大値を取得する Maxメソッドを使用 // すべてのキャラクターの中で // 最も大きな力のパラメータを取得します var
result = characters.Max(c => c.Power);
27.
最小値を取得する 従来のコーディング // すべてのキャラクターの中で // 最も小さな力のパラメータを取得します var
result = int.MaxValue; foreach (var character in characters) { if (character.Power < result) { result = character.Power; } }
28.
最小値を取得する Minメソッドを使用 // すべてのキャラクターの中で // 最も小さな力のパラメータを取得します var
result = characters.Min(c => c.Power);
29.
最大値を持つ要素を取得する MaxメソッドとFirstメソッドを使用 // 最も大きな力を持つキャラクターを取得します int max
= characters.Max(c => c.Power); var result = characters.First(c => c.Power == max);
30.
最大値を持つ要素をすべて取得する MaxメソッドとWhereメソッドを使用 // 最も大きな力を持つキャラクターをすべて取得します int max
= characters.Max(c => c.Power); var result = characters.Where(c => c.Power == max);
31.
合計値を取得する 従来のコーディング // アイテムの購入金額を取得します var result
= 0; foreach (var item in items) { result += item.Price; }
32.
合計値を取得する Sumメソッドを使用 // アイテムの購入金額を取得します var result
= items.Sum(c => c.Price);
33.
平均値を取得する 従来のコーディング // アイテムの平均金額を取得します var result
= 0; foreach (var item in items) { result += item.Price; } result /= items.Count;
34.
平均値を取得する Averageメソッドを使用 // アイテムの平均金額を取得します var result
= items.Average(c => c.Price);
35.
指定された型に一致する要素を抽出する 従来のコーディング // 錬金術士のみ錬金術を使います foreach (var
character in characters) { var result = character as Alchemist; if (result != null) { result.Alchemy(); } }
36.
指定された型に一致する要素を抽出する OfTypeメソッドを使用 // 錬金術士のみ錬金術を使います foreach (var
result in characters.OfType<Alchemist>()) { result.Alchemy(); }
37.
配列を規定値で初期化する 従来のコーディング // すべてのフラグをONで初期化します bool[] flags
= new bool[100]; for (int i = 0; i < flags.Length; i++) { flags[i] = true; }
38.
配列を規定値で初期化する Repeatメソッドを使用 // すべてのフラグをONで初期化します bool[] flags
= Enumerable.Repeat(true, 100).ToArray();
39.
指定された数の要素を取得する 従来のコーディング //最新の10件のプレゼントの一覧を取得します var result =
new List<Present>(); for (int i = 0; i < 10; i++) { result.Add(presents[i]); }
40.
指定された数の要素を取得する Takeメソッドを使用 //最新の10件のプレゼントの一覧を取得します var result =
presents.Take(10);
41.
指定された数の要素を読み飛ばす 従来のコーディング // 11件目以降のプレゼントの一覧を取得します var result
= new List<Present>(); for (int i = 10; i < presents.Length; i++) { result.Add(presents[i]); }
42.
指定された数の要素を読み飛ばす Skipメソッドを使用 // 11件目以降のプレゼントの一覧を取得します var result
= presents.Skip(10);
43.
ページャーの機能を実装する SkipメソッドとTakeメソッドを使用 // 指定されたページに表示する // プレゼントの一覧を取得します var
result = presents.Skip(page * 10).Take(10);
44.
昇順にソートする OrderByメソッドを使用 // 価格が安い順にアイテムを取得します var result
= items.OrderBy(c => c.Price);
45.
降順にソートする OrderByDescendingメソッドを使用 // 価格が安い順にアイテムを取得します var result
= items.OrderByDescending(c => c.Price);
46.
逆順にする Reverseメソッドを使用 // アイテムの順番を逆転させます var result
= items.Reverse();
47.
重複を取り除く Distinctメソッドを使用 // 名前の重複を取り除きます var result
= names.Distinct();
48.
まとめ
49.
LINQ to Objectsを使用すると… ソースコードを簡潔に記述できます ?
for文が減る ? foreach文が減る ? if文が減る ? 変数が減る
50.
ありがとうございました
Download