コガネブログ

平日更新を目標にUnityやC#などのゲーム開発アレコレを書いていきます

【C#】配列やリストから最小値もしくは最大値を持つ要素を検索する拡張メソッド

ソースコード

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

public static class IEnumerableExtensions
{
    /// <summary>
    /// 最小値を持つ要素を返します
    /// </summary>
    public static TSource FindMin<TSource, TResult>
    ( 
        this IEnumerable<TSource> self, 
        Func<TSource, TResult>    selector 
    )
    {
        return self.First( c => selector( c ).Equals( self.Min( selector ) ) );
    }
    
    /// <summary>
    /// 最大値を持つ要素を返します
    /// </summary>
    public static TSource FindMax<TSource, TResult>
    ( 
        this IEnumerable<TSource> self, 
        Func<TSource, TResult>    selector 
    )
    {
        return self.First( c => selector( c ).Equals( self.Max( selector ) ) );
    }
}

使い方

class Character
{
    public int    Number;
    public string Name;

    public Character( int number, string name )
    {
        Number = number;
        Name   = name;
    }
}

void Awake()
{
    var list = new []
    {
        new Character( 1, "フシギダネ" ), 
        new Character( 2, "フシギソウ" ), 
        new Character( 3, "フシギバナ" ), 
    };

    Debug.Log( list.FindMin( c => c.Number ).Name ); // フシギダネ
    Debug.Log( list.FindMax( c => c.Number ).Name ); // フシギバナ
}