Gibt es eine Lower Bound-Funktion für eine SortedList & lt; K, V & gt;

Gibt es eine Untere Schranke der Funktion auf eine SortedList<K ,V>? Die Funktion sollte das erste element gleich dem oder größer als der angegebene Schlüssel ist. Gibt es eine andere Klasse, die diese unterstützt?

Jungs - bitte lies die Frage noch einmal. Brauche ich nicht als Funktion, liefert den Schlüssel, wenn es vorhanden ist. Ich bin interessiert in Szenario wenn es keine genauen Schlüssel matching.

Ich bin interessiert in O(log n) Zeit. Es bedeutet, dass ich nicht haben ein problem mit einer foreach-Schleife, sondern möchte zu einem effizienten Weg, dies zu tun.

Habe ich einige tests gemacht.

Linq-Anweisungen sind nicht optimiert, weder der compiler noch die Laufzeitumgebung Maschine, so gehen Sie durch alle Elemente aus der Sammlung und langsame O(n). Basierend auf Mehrdad Afshari Antwort, hier ist eine Binäre Suche in O(log n) auf der Keys-Auflistung:

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;
}

InformationsquelleAutor der Frage agsamek | 2009-02-27

Schreibe einen Kommentar