Wie suche ich eine generische TListT-Sammlung? [Duplikat]

8

Ich habe eine Sammlung von

%Vor%

TActivityCategory hat eine Name-Eigenschaft vom Typ string und ich möchte den TList mit der Name-Eigenschaft suchen.

Ich sehe BinarySearch in der TList & lt; & gt; aber das würde eine Instanz von TActivityCategory erfordern. Ich möchte nur die Zeichenfolge für einen Namen übergeben.

Wie würde ich das machen?

    
Thomas Jaeger 08.11.2011, 17:26
quelle

3 Antworten

4

Wenn Sie die Liste erstellen, können Sie einen Vergleich übergeben. Es gibt einige Vergleichsklassen in der Generics.Defaults-Unit, in der Sie eine anonyme Methode zum Vergleichen zweier Elemente übergeben können. Sie werden für verschiedene Methoden wie IndexOf, Contains oder Sort verwendet.

Beispiel:

%Vor%     
Stefan Glienke 08.11.2011 19:05
quelle
1

Wenn Sie nicht nach einer Instanz suchen müssen, müssen Sie Ihre eigene Suche durchführen. Es gibt drei grundlegende Möglichkeiten, dies zu tun:

  • Binäre Suche: Implementieren Sie Ihre eigene binäre Suche. Dies funktioniert nur, wenn die Liste sortiert ist.
  • Lineare Suche: Implementieren Sie Ihre eigene lineare Suche. Dies wird immer funktionieren, aber auf großen Listen ist es deutlich langsamer als eine binäre Suche.
  • Wörterbuchsuche: Pflegen Sie neben der Liste ein TDictionary<string, TActivityCategory> . Keine Suche erforderlich, aber Sie müssen etwas Code schreiben, um die beiden synchron zu halten.
Mason Wheeler 08.11.2011 17:32
quelle
1

Um ehrlich zu sein, und unter Berücksichtigung aller für einen komparatorbasierten Ansatz erforderlichen Kesselplatten ist es vielleicht am einfachsten, eine eigene Suchroutine zu schreiben:

%Vor%     
David Heffernan 08.11.2011 19:54
quelle

Tags und Links