🐷
【C#プログラミング】C#のLINQ機能の基本をまとめてみた
この記事でわかること
- C#のLINQ機能の基本をまとめてみた で何ができるか
- C#での基本的な書き方
- 具体的な使用例
- 実装時に間違えやすい点
全体像
ここでは、LINQの基本的なメソッドをいくつかまとめておきます
1. Where
指定した条件に合致する要素をフィルタリングします。
int[] numbers = { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
Console.WriteLine(string.Join(", ", evenNumbers)); // Output: 2, 4, 6
2. Select
各要素に対して変換を行い、新しいシーケンスを作成します。
int[] numbers = { 1, 2, 3 };
var squares = numbers.Select(n => n * n);
Console.WriteLine(string.Join(", ", squares)); // Output: 1, 4, 9
3. OrderBy / OrderByDescending
要素を指定したキーに基づいて昇順または降順に並べ替えます。
string[] names = { "Alice", "Bob", "Charlie" };
var sortedNames = names.OrderBy(name => name.Length);
Console.WriteLine(string.Join(", ", sortedNames)); // Output: Bob, Alice, Charlie
var descSortedNames = names.OrderByDescending(name => name.Length);
Console.WriteLine(string.Join(", ", descSortedNames)); // Output: Charlie, Alice, Bob
4. First / FirstOrDefault
条件を満たす最初の要素を取得します。条件を指定しない場合は、最初の要素を返します。FirstOrDefault は要素が見つからない場合にデフォルト値を返します。
int[] numbers = { 1, 2, 3, 4, 5 };
int firstEven = numbers.First(n => n % 2 == 0); // Output: 2
int firstOrDefault = numbers.FirstOrDefault(n => n > 10); // Output: 0 (デフォルト値)
5. Sum / Average / Max / Min
数値のコレクションに対して、合計、平均、最大値、最小値を計算します。
int[] numbers = { 1, 2, 3, 4, 5 };
int sum = numbers.Sum(); // Output: 15
double average = numbers.Average(); // Output: 3.0
int max = numbers.Max(); // Output: 5
int min = numbers.Min(); // Output: 1
6. Count
条件を満たす要素の数をカウントします。条件を指定しない場合、全要素の数を返します。
int[] numbers = { 1, 2, 3, 4, 5, 6 };
int evenCount = numbers.Count(n => n % 2 == 0); // Output: 3
7. Any / All
Any は条件を満たす要素が1つでも存在するかを確認します。All は全ての要素が条件を満たすかを確認します。
int[] numbers = { 1, 2, 3, 4, 5 };
bool hasEven = numbers.Any(n => n % 2 == 0); // Output: true
bool allPositive = numbers.All(n => n > 0); // Output: true
8. Distinct
コレクションから重複した要素を取り除き、ユニークな要素だけを取得します。
int[] numbers = { 1, 2, 2, 3, 3, 3, 4 };
var distinctNumbers = numbers.Distinct();
Console.WriteLine(string.Join(", ", distinctNumbers)); // Output: 1, 2, 3, 4
9. Take / Skip
Take は先頭から指定した数の要素を取得します。Skip は先頭から指定した数の要素をスキップします。
int[] numbers = { 1, 2, 3, 4, 5 };
var firstTwo = numbers.Take(2); // Output: 1, 2
var skipTwo = numbers.Skip(2); // Output: 3, 4, 5
10. GroupBy
コレクションを指定したキーに基づいてグループ化します。
string[] words = { "apple", "banana", "apricot", "blueberry", "cherry" };
var groupedWords = words.GroupBy(w => w[0]);
foreach (var group in groupedWords)
{
Console.WriteLine($"Key: {group.Key}");
foreach (var word in group)
{
Console.WriteLine($" {word}");
}
}
// Output:
// Key: a
// apple
// apricot
// Key: b
// banana
// blueberry
// Key: c
// cherry
つまずきやすいポイント
- メソッドが元の配列や文字列を変更するのか、新しい値を返すのかを確認します。
- indexの範囲外アクセスに注意します。
- 小さなサンプルで出力を確認してから、実際の処理に組み込むと安全です。
もう少し深く学ぶなら
『独習C# 第5版』
Where、Select、GroupByなどのLINQ操作を、遅延実行や型の変化も含めて体系的に使いたい人に向く一冊です。
Discussion