C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のQueryable.TakeLast()メソッドで末尾の要素を取得する方法

C#のLINQに用意されているTakeLast()メソッドを使うと、シーケンスの末尾から指定した数の要素を簡単に取得できます。この記事では、QueryableのTakeLast()メソッドの基本的な使い方を、サンプルコードと実行結果とともにわかりやすく解説します。

TakeLast()メソッドとは

TakeLast()はSystem.Linq名前空間に含まれる拡張メソッドの一つで、配列やリストなどのシーケンスの末尾から指定した個数の要素を取得するために使用します。戻り値はIEnumerable<T>型として返されます。

サンプルデータの準備

まず、次のような整数型の配列を用意します。ここでは、書籍のページ数を表すデータを使用します。

int[] pages = { 492, 290, 129, 602, 152 };

並べ替えとTakeLast()の組み合わせ

OrderByメソッドで要素を昇順に並べ替え、AsQueryable()でIQueryableに変換してからTakeLast()メソッドを呼び出すことで、末尾から指定した数の要素を取得できます。

pages.AsQueryable().OrderBy(s => s).TakeLast(2);

この例では、昇順に並べ替えたシーケンスの最後の2つの要素、つまりページ数が多い上位2件が取得されます。

完全なサンプルコード

以下に、処理の全体像を確認できる完全なプログラムを示します。

using System;
using System.Linq;
using System.Collections.Generic;

public class Demo {
    public static void Main() {
        // 書籍のページ数
        int[] pages = { 492, 290, 129, 602, 152 };

        // 昇順に並べ替えて、末尾の2件(ページ数が多い上位2件)を取得
        IEnumerable<int> last = pages.AsQueryable().OrderBy(s => s).TakeLast(2);

        foreach (int res in last) {
            Console.WriteLine(res);
        }
    }
}

実行結果

492
602

まとめ

TakeLast()メソッドを使えば、並べ替え後のシーケンスから末尾の要素だけを効率的に取り出せます。特に「上位N件」のように最大値側の要素を複数取得したい場合に、OrderByと組み合わせると非常に便利です。逆に先頭から要素を取得したい場合は、Take()メソッドを使用します。

  1. C#のGroupBy()メソッドとは?要素をグループ化する使い方を解説

    GroupBy()メソッドとはC#のGroupBy()は、System.Linq名前空間に用意されている拡張メソッドの一つです。指定したキー値に基づいてコレクション内の要素をグループ化し、その結果をIEnumerable<IGrouping<TKey, TElement>>として返します。各グループにはKeyプロパティが割り当てられ、同じキーを持つ要素がひとつのまとまりとして扱われます。サンプルコードまず、次のような整数型の配列を用意します。int[] arr = { 2, 30, 45, 60, 70 };この配列に対してGroupBy()を使い、「50以下の要素」と

  2. C#のCompareTo()メソッドの使い方を解説

    C#では、2つの値を比較する際にCompareTo()メソッドを使用します。このメソッドは、呼び出し元の値と引数で渡した値を比較し、その大小関係を整数値として返します。CompareTo()メソッドの戻り値CompareTo()メソッドの戻り値は以下の3パターンです。0 = 両方の値が等しい場合1 = 呼び出し元の値が引数の値より大きい場合(第2の数値が小さい)-1 = 呼び出し元の値が引数の値より小さい場合(第1の数値が小さい)CompareTo()メソッドの実装例それでは、C#でCompareTo()メソッドを実装するサンプルコードを見てみましょう。ここでは、同じ値を持つ2つのint型変数