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)?
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).