Wie finde ich den Index der Unterliste in der Liste?

8

Ich suche nach einem effizienten Weg (in .NET), wie man herausfinden kann, ob es eine Bytefolge in einer Liste von Bytes gibt und wenn es welche gibt, wo der Index beginnt.

Sagen wir zum Beispiel:

%Vor%

und das Ergebnis sollte sein, dass meine Sequenz auf dem Index 3 in der listOne und auf dem Index -1 (dh es ist nicht dort) in der listTwo.

Natürlich kann ich die Liste int durch int und von jedem Index durchlaufen und suchen, wenn die folgenden Zahlen zu meiner Sequenz passen, aber gibt es einen effizienteren Weg (zum Beispiel mit Erweiterungsmethoden)?

    
Lukáš Rubeš 20.08.2010, 09:41
quelle

3 Antworten

5

Dies ist im Wesentlichen das gleiche Problem wie die Suche nach Teilstrings (tatsächlich ist eine Liste, in der die Reihenfolge signifikant ist, eine Verallgemeinerung von "string").

Glücklicherweise hat die Computerwissenschaft dieses Problem lange Zeit in Betracht gezogen, so dass Sie auf den Schultern von Riesen stehen können.

Sieh dir die Literatur an. Einige vernünftige Startpunkte sind:

Ссылка

Ссылка

Ссылка

Sogar der Pseudocode in den Wikipedia-Artikeln reicht aus, um relativ einfach nach C # zu portieren. Sehen Sie sich die Beschreibungen der Leistung in verschiedenen Fällen an und entscheiden Sie, welche Fälle am wahrscheinlichsten von Ihrem Code betroffen sind. (Ich denke die erste von dem, was Sie sagen, dass die Suchschlüsselliste kurz ist).

    
Jon Hanna 20.08.2010 10:15
quelle
4

Ich denke, der sauberste Weg ist, eine generische Erweiterungsmethode wie folgt zu erstellen:

%Vor%

ruft auf diese Weise an:

%Vor%

P.S. Sie können auch mit einem bestimmten Index beginnen, wenn Sie nach weiteren Unterlisten suchen müssen

    
digEmAll 20.08.2010 10:27
quelle
1

Ich würde vorschlagen, jedes List<int> in ein String zu konvertieren und dann mit String.IndexOf(sequence) zu suchen, um zu bestimmen, wo oder ob die Sequenz vorhanden ist.

    
ChrisBD 20.08.2010 09:58
quelle

Tags und Links