SortedList<K ,V>
に下限機能がありますか?この関数は、指定されたキー以上の最初の要素を返す必要があります。これをサポートする他のクラスがありますか?SortedList <K ,V>に下限関数がありますか?
みんな - もう一度質問をお読みください。 キーがある場合は、キーを返す関数は必要ありません。正確なキーマッチングがない場合のシナリオに興味があります。
私はO(log n)時間に興味があります。これはforeachループで問題がないことを意味しますが、これを行う効率的な方法を望みます。
私はこれについていくつかのテストを行いました。
Linq文は、コンパイラもランタイムマシンも最適化されていないため、すべてのコレクション要素を処理し、遅いO(n)です。
public static int FindFirstIndexGreaterThanOrEqualTo<T>(
this IList<T> sortedCollection, T key
) where T : IComparable<T> {
int begin = 0;
int end = sortedCollection.Count;
while (end > begin) {
int index = (begin + end)/2;
T el = sortedCollection[index];
if (el.CompareTo(key) >= 0)
end = index;
else
begin = index + 1;
}
return end;
}
Keysプロパティを読み取るたびにコレクションが生成されませんか? – agsamek
agsamek:いいえ、再生されていません。元のコレクションの要素に直接アクセスできる内部クラスKeyListのインスタンスを返します。このプロセスでは何もコピーされません。 –
"キーと値のコピーはありません"は、SortedDictionaryの主な違いです。 –