C# LINQのSelectManyメソッドの使い方を徹底解説
C#のLINQにおけるSelectManyメソッドは、複数のコレクション(シーケンス)に含まれる要素を、1つのフラットなコレクションへと平坦化して結合するためのメソッドです。ネストされたコレクションを扱う際に非常に便利で、例えば「文字列配列を1つの文字コレクションにまとめる」といった処理を簡潔に記述できます。
SelectManyメソッドとは
通常のSelectメソッドが各要素に対して変換を行い、その結果をそのまま返すのに対し、SelectManyは各要素から生成された複数のコレクションをすべて連結し、単一のシーケンスとして返します。これにより、入れ子構造を持つデータを簡単に平滑化(フラット化)できます。
典型的な使用例として、文字列の配列を個々の文字(char)のコレクションに変換するケースが挙げられます。
サンプル:文字列配列を文字のコレクションに変換する
まず、次のような文字列の配列を用意します。
string[] str = { "Mobile", "Laptop", "Tablet" };
この配列に対してSelectManyを使い、各文字列をToCharArray()メソッドで文字配列に変換します。
str.SelectMany(item => item.ToCharArray());
このように書くことで、「Mobile」「Laptop」「Tablet」という3つの文字列に含まれるすべての文字が、1つの文字シーケンスとしてまとめられます。
完全なコード例
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
string[] str = { "Mobile", "Laptop", "Tablet" };
var res = str.SelectMany(item => item.ToCharArray());
Console.WriteLine("String converted to character array: ");
foreach (char letter in res) {
Console.Write(letter);
}
}
}
実行結果
String converted to character array: MobileLaptopTablet
ポイントまとめ
- SelectManyは、ネストされたコレクションを1つのシーケンスに平坦化するために使う。
- ラムダ式の中で各要素から新しいコレクション(この例ではToCharArray()の結果)を返すと、それらが自動的に連結される。
- foreachループで処理した結果、3つの文字列の文字がすべて順番に出力されていることが確認できる。
このようにSelectManyを活用すれば、複数のコレクションを扱う処理をわずか1行で簡潔に表現でき、コードの可読性も大きく向上します。ぜひ実際の開発でも活用してみてください。
-
C#のArray.BinarySearchメソッドの使い方 – 配列要素の位置を検索する
C#のArray.BinarySearchメソッドを使用すると、配列内の要素がどの位置(インデックス)にあるかを検索できます。このメソッドは二分探索(バイナリサーチ)アルゴリズムを採用しているため、大量のデータを扱う場合でも高速に処理できるのが特徴です。 Array.BinarySearchメソッドの基本的な使い方 まず、検索対象となる文字列配列を設定します。 string[] str = { a, m, i, t }; 次に、Array.BinarySearchメソッドを使って、文字「t」の位置を取得します。 Array.BinarySearch(str, t); サンプルコード 以下に
-
C#のClone()メソッドで配列を複製する方法
C#のClone()メソッドとはC#におけるClone()メソッドは、配列の複製(コピー)を作成するためのメソッドです。元の配列と同じ要素を持つ新しい配列を簡単に生成できます。なお、Clone()メソッドの戻り値はobject型であるため、通常はas演算子や明示的なキャストを使って、目的の配列型に変換して受け取ります。また、このメソッドによるコピーは「浅いコピー(シャローコピー)」である点にも注意しましょう。配列自体は新しく作られますが、参照型の要素は元の配列と同じオブジェクトを共有します。Clone()メソッドで配列を複製するサンプルコード以下は、Clone()メソッドを使って文字列配列を複