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

【C#】Single()メソッドで条件を満たす唯一の要素を取得する方法

C#のLINQに用意されているSingle()メソッドは、指定した条件を満たす「たった一つの要素」を返すメソッドです。もし条件に一致する要素が複数存在する場合、例外(エラー)がスローされる点に注意が必要です。

Single()メソッドの基本的な使い方

まず、次のような文字列配列を用意します。

string[] str = { "jack", "tom", "henry", "time"};

この配列に対してSingle()メソッドを呼び出し、さらにラムダ式を使って「文字数が4より大きい」要素を抽出してみましょう。

str.AsQueryable().Single(name => name.Length > 4);

サンプルコード

以下は、実際に動作する完全なプログラム例です。

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

public class Demo {
    public static void Main() {
        string[] str = { "jack", "tom", "henry", "time"};

        // 文字数が4より大きい文字列を検索
        string res = str.AsQueryable().Single(name => name.Length > 4);

        Console.WriteLine(res);
    }
}

実行結果

henry

解説と注意点

上記の例では、配列内の要素のうち文字数が4を超えているのは「henry」だけなので、正常に結果が返されます。

ただし、Single()メソッドは条件に一致する要素が複数ある場合や、逆に一つも存在しない場合に例外をスローします。そのため、実行時エラーを避けたい場合は、以下の代替メソッドの利用を検討するとよいでしょう。

  • SingleOrDefault():一致する要素がない場合にnull(参照型の場合)を返す
  • First() / FirstOrDefault():最初に一致した要素を返す(複数一致でも例外にならない)

「必ず一意であるべき」というビジネスルールの検証など、要素が確実に1つだけであることを保証したい場面で、Single()メソッドは非常に有効です。

  1. 指定したインデックスの要素が一致する行を返すPythonプログラム

    指定したインデックス位置にある要素を持つ行(サブリスト)を取得したい場合、シンプルな繰り返し処理(forループ)と「append」メソッドを組み合わせることで簡単に実現できます。 サンプルコード 以下に実際の実装例を示します。 my_list_1 = [[21, 81, 35], [91, 14, 0], [64, 61, 42]] my_list_2 = [[21, 92, 63], [80, 19, 65], [54, 65, 36]] print("The first list is :") print(my_list_1) print("The seco

  2. Pythonで単語のリストから最も長い単語の長さを返す方法

    単語のリストから最も長い単語の長さを取得したい場合、リストを引数として受け取るメソッドを定義するのが基本的なアプローチです。このメソッドは、リスト内の各要素の文字数を順番に比較し、最大の長さを特定して返します。 サンプルコード 以下に具体的な実装例を示します。 def find_longest_length(my_list): max_length = len(my_list[0]) temp = my_list[0] for element in my_list: if len(element) > max_length: