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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Binäre Suche die
SortedList.Keys
Sammlung.Hier gehen wir. Dies ist in O(log n):
InformationsquelleAutor der Antwort Mehrdad Afshari
Ich würde mich mit LINQ (vorausgesetzt, du bist mit C#3), aber durch die überlastung der FirstOrDefault, nimmt ein Prädikat:
(eine Menge von den anderen Enumerable-Methoden können auch Prädikate, die eine nette Abkürzung)
InformationsquelleAutor der Antwort Dave W
Nicht bewusst, aber es ist eine einfache LINQ-Anweisung:
first
ist entweder das erste Objekt, der vergeht, den Vergleich oderdefault(T)
(in der Regelnull
).Bearbeiten
DaveW version:
macht die gleiche Arbeit aber potenziell schneller sein, würden Sie haben, um es zu testen obwohl.
InformationsquelleAutor der Antwort Garry Shutler
Oder Sie schreiben eigene Erweiterung Methode, dies zu tun. Beachten Sie, dass alle diese Funktionen sind NICHT garantiert, um in einem sequesce.
InformationsquelleAutor der Antwort Migol
Hoffentlich schneller sein soll, je nach SortedList Umsetzung.
InformationsquelleAutor der Antwort Shannon Monasco