09/02/22 06:25:47
>>783
もちろんそれで良いんだけど、まさに、「標準で用意してくれ」って意見なんだよね。
それと、SortedDictionaryだと>>773みたいに列挙の必要はないのにEnumerator
をとることになって格好悪い。
具体的には、IEnumealeは順序を保証しない列挙に特化(Reverse, First, Lastなし, その代わり
foreachの並列実行サポート)して、IOrderedEnumerableみたいなインタフェースを追加する。
こいつには順序に従った区間(-∞,a]と等価なbool値デリゲートおよび探索開始ノードを取るLast,
順序に従った区間[a,+∞)に等価なbool値デリゲートおよび探索開始ノードを取るFirst, 及び順序に
従って前方、後方に移動できるIOrderedEnumeratorを与えるGetOrderedEnumeratorメソッドが
あって、順序があって先頭・末尾があるコレクションはこいつで表現される。そんでもって標準で
拡張メソッドで``アルゴリズム''を提供する。これが一番みんなが幸せになれるんじゃないかな。
LINQに慣れると、標準での汎用的なインタフェースへの拡張メソッドの提供という事の便利さが
身に染みる。
>>771も気になるけれど、IEnumerable<T>, IList<T>, ICollection<T>インタフェースへの
拡張メソッドによる実装なので、ツリー状の構造を活かしたバイナリサーtはなくって、IList<T>
のインデックスベースのバイナイサーチしかないみたい。それはそもそもList, SortedListにはある
以上魅力に乏しいよなあ。