C#のLINQ TakeWhile()メソッドとは?条件がtrueの間だけ要素を取得する方法
C#のLINQに用意されているTakeWhile()メソッドを使うと、指定した条件がtrueである限り、シーケンスから先頭側の要素を順番に取得できます。条件が初めてfalseになった時点で処理が止まり、それ以降の要素は一切取得されません。
まず、次のような文字列のリストを用意します。
IList<string> str = new List<string>(){ "Car", "Bus", "Truck", "Airplane"};ここでは、「文字数が4未満の文字列」だけを取得したいとします。その場合は、ラムダ式で条件を記述し、それをTakeWhile()メソッドに渡します。
str.TakeWhile(a => a.Length < 4);
このコードでは、リストの先頭から順に各要素の文字数を判定し、条件(a.Length < 4)が成立している間だけ要素を取り出します。「Truck」(5文字)の時点で条件がfalseとなるため、そこで処理が終了し、以降の「Airplane」は取得されません。
サンプルプログラム
以下は、条件がtrueである間だけ要素を表示する完全なサンプルコードです。
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
IList<string> str = new List<string>(){ "Car", "Bus", "Truck", "Airplane"};
var res = str.TakeWhile(a => a.Length < 4);
foreach(var arr in res)
Console.WriteLine(arr);
}
}実行結果
Car Bus
Where()メソッドとの違い
似たような処理を行うWhere()メソッドは、シーケンス内のすべての要素に対して条件を判定し、条件を満たす要素だけをフィルタリングします。一方、TakeWhile()は最初に条件がfalseとなった要素に出会った時点で即座に処理を中断する点が大きな特徴です。この挙動の違いを理解しておくことで、目的に応じた適切なメソッドを選択できるようになります。
-
C# LINQ Distinct()メソッドでリストから重複要素を削除する方法
C#のLINQで重複しない要素(一意の値)だけを取得したい場合は、Distinct()メソッドを使用します。このメソッドは、シーケンス内の重複する要素を取り除き、各要素を1度だけ返してくれます。 重複要素を含むリストの準備 まずは、重複した要素を含むリストを用意しましょう。 List<int> points = new List<int> { 5, 10, 5, 20, 30, 30, 40, 50, 60, 70 }; このリストには「5」と「30」がそれぞれ2回含まれています。 Distinct()メソッドで重複を除去する 重複を除いた要素を取得するには、次のように
-
C#のTakeWhileメソッドの使い方をわかりやすく解説
C#のLINQに用意されているTakeWhile()メソッドを使うと、Predicate(述語)で指定した条件が成立している間、シーケンスの先頭から要素を取得することができます。 このメソッドは、条件を満たす限り先頭から順に要素を取り出し、最初に条件を満たさなくなった要素に到達した時点で処理を停止するという特徴があります。そのため、配列の途中に条件外の要素があると、それ以降の要素はたとえ条件を満たしていても取得されない点に注意が必要です。 TakeWhile()メソッドの基本的な使い方 まず、整数型の配列を宣言して初期化します。 int[] arr = { 25, 40, 65, 70 };