🐷

C#のLINQ機能の基本をまとめてみた

2024/10/28に公開

ここでは、LINQの基本的なメソッドをいくつかまとめておきます

1. Where

指定した条件に合致する要素をフィルタリングします。

csharp
コードをコピーする
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

各要素に対して変換を行い、新しいシーケンスを作成します。

csharp
コードをコピーする
int[] numbers = { 1, 2, 3 };
var squares = numbers.Select(n => n * n);
Console.WriteLine(string.Join(", ", squares)); // Output: 1, 4, 9

3. OrderBy / OrderByDescending

要素を指定したキーに基づいて昇順または降順に並べ替えます。

csharp
コードをコピーする
string[] names = { "Alice", "Bob", "Charlie" };
var sortedNames = names.OrderBy(name => name.Length);
Console.WriteLine(string.Join(", ", sortedNames)); // Output: Bob, Alice, Charlie

csharp
コードをコピーする
var descSortedNames = names.OrderByDescending(name => name.Length);
Console.WriteLine(string.Join(", ", descSortedNames)); // Output: Charlie, Alice, Bob

4. First / FirstOrDefault

条件を満たす最初の要素を取得します。条件を指定しない場合は、最初の要素を返します。FirstOrDefault は要素が見つからない場合にデフォルト値を返します。

csharp
コードをコピーする
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

数値のコレクションに対して、合計、平均、最大値、最小値を計算します。

csharp
コードをコピーする
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

条件を満たす要素の数をカウントします。条件を指定しない場合、全要素の数を返します。

csharp
コードをコピーする
int[] numbers = { 1, 2, 3, 4, 5, 6 };
int evenCount = numbers.Count(n => n % 2 == 0); // Output: 3

7. Any / All

Any は条件を満たす要素が1つでも存在するかを確認します。All は全ての要素が条件を満たすかを確認します。

csharp
コードをコピーする
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

コレクションから重複した要素を取り除き、ユニークな要素だけを取得します。

csharp
コードをコピーする
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 は先頭から指定した数の要素をスキップします。

csharp
コードをコピーする
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

コレクションを指定したキーに基づいてグループ化します。

csharp
コードをコピーする
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

おすすめ・参考書籍

https://amzn.to/3YFmdH5

Discussion