2015-08-12 9 views
6

Welche der MethodenEffizienz der Liste <T> .IndexOf() im Vergleich zu Liste <T> .FindIndex()

  • List<T>.IndexOf() und
  • List<T>.FindIndex()

ist effizienter in Bezug auf die Bearbeitungszeit?

Der Typ T in diesem Fall ist String.

+1

Sie werden beide sein O (N), wobei jeder Vergleich unter der Annahme, O (1) ... –

+5

[Wenn Sie zwei Pferde haben, und Sie wollen, welche der beiden ist, desto schneller wird dann wissen ** Rennen Pferde * *] (http://ericlippert.com/2012/12/17/performance-rant/) –

+0

Beide benutzen denselben Suchalgorithmus? – user3409181

Antwort

9

IndexOf führt eine For-Schleife durch, wobei die Equals Implementierung der gesuchten Objekte verwendet wird, um nach einer Übereinstimmung zu suchen. FindIndex erstellt auch eine for-Schleife, aber wertet Predicate aus, um stattdessen nach einer Übereinstimmung zu suchen.

Sie beide kochen zu einer for-Schleife. Der Leistungsunterschied ist, wenn überhaupt, vernachlässigbar. Hier sind einige MSDN Auszüge:

List<T>.IndexOf Method (T):

Dieses Verfahren eine lineare Suche durchführt; daher ist dieses Verfahren ein O (n) Betrieb, wobei nCount ist.

List<T>.FindIndex Method (Predicate<T>):

Diese Methode führt eine lineare Suche; daher ist dieses Verfahren ein O (n) Betrieb, wobei nCount ist.

Das sagte, die beiden Funktionen würden ganz anders verwendet werden. Bei ersterem wird davon ausgegangen, dass Sie ein Objekt aus der Liste haben, und Sie müssen lediglich wissen, an welchem ​​Index es (falls vorhanden) in der Liste vorhanden ist.

Letzteres setzt voraus, dass Sie einige Kriterien für ein Objekt kennen und Sie den ersten Index suchen möchten, bei dem ein Objekt in der Liste diesen Kriterien entspricht. Es könnte mehrere Übereinstimmungen geben, aber die Methode gibt die erste Übereinstimmung zurück.

Verwandte Themen