Hier ist eine ziemlich schnelle Erhaltungsreihenfolge. Aber ich bin ein bisschen besorgt darüber, wie LINQ Group und Where:
%Vor%Bearbeiten: Dieser schlägt Lukes in einigen Fällen immer noch langsamer als dtb, aber es behält die Reihenfolge
%Vor% Dies erhält die Reihenfolge und ist basierend auf meinen Tests viermal schneller als die Verwendung eines HashSets. Dies setzt voraus, dass dein Zeichenbereich 0-255 ist, aber du kannst das problemlos erweitern. Wenn Sie dies in einer Schleife verwenden möchten, verschieben Sie int[] c = new int[255];
und in der Funktion Array.Clear(c,0,255)
.
Dieser Algorithmus ist allgemein, kann auf jede Sprache angewendet werden