C#の SortedList<TKey, TValue>
ジェネリッククラスや SortedDictionary<TKey, TValue>
ジェネリッククラスには、C++の std::map
テンプレートクラスにあるメンバ関数 lower_bound
や upper_bound
に相当するメソッドがありません。
ではどうするのかというと、 .NET Framework 3.5 & C# 3.0 以降では IEnumerable<T>
インタフェースに対する拡張メソッドである FirstOrDefault
および LastOrDefault
を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | - ! - | | | | | | | | | | | | | | | | | ! - - ! | | | | | | | | | | | | | ! |
|
拡張メソッド FirstOrDefault
は、条件に合致する(=引数のデリゲートが true
を返す)最初の要素を返します。
拡張メソッド LastOrDefault
は、条件に合致する(=引数のデリゲートが true
を返す)最後の要素を返します。
いずれのメソッドも見つからなかった場合は要素型の既定値(上述のコードならば default(KeyValuePair<TKey, TValue>)
)を返します。
要素が存在するとわかっている場合には拡張メソッド First
および Last
も使えます。
こちらはリストが空である場合や要素が見つからなかった場合に例外をスローします。
なお、どのメソッドにもデリゲートを引数に取らないオーバロードがあり、そちらは単純にリスト内で一番最初および一番最後の要素を返します。