Ich habe eine Methode, um jedes Zeichen außer den angegebenen zu ersetzen. Zum BeispielInverse String.Replace - Schneller geht es?
ReplaceNot("test. stop; or, not", ".;/\\".ToCharArray(), '*');
zurückkehren würden
"****.*****;***,****".
Nun, dies ist nicht eine Instanz vorzeitiger Optimierung ist. Ich rufe diese Methode während einer Netzwerkoperation einige Male auf. Ich habe festgestellt, dass es bei längeren Saiten etwas Latenz verursacht, und das Entfernen hat etwas geholfen. Jede Hilfe, um dies zu beschleunigen, wäre willkommen.
public static string ReplaceNot(this string original, char[] pattern, char replacement)
{
int index = 0;
int old = -1;
StringBuilder sb = new StringBuilder(original.Length);
while ((index = original.IndexOfAny(pattern, index)) > -1)
{
sb.Append(new string(replacement, index - old - 1));
sb.Append(original[index]);
old = index++;
}
if (original.Length - old > 1)
{
sb.Append(new string(replacement, original.Length - (old + 1)));
}
return sb.ToString();
}
Endgültige # s. Ich fügte auch einen Testfall für eine 3K Zeichenkette hinzu, lief bei 100K mal anstelle von 1M, um zu sehen, wie gut jede dieser Skalen ist. Die einzige Überraschung war, dass der reguläre Ausdruck ‚besser skaliert‘ als die anderen, aber es ist keine Hilfe, da es sehr langsam beginnen:
User Short * 1M Long * 100K Scale John 319 2125 6.66 Luke 360 2659 7.39 Guffa 409 2827 6.91 Mine 447 3372 7.54 DirkGently 1094 9134 8.35 Michael 1591 12785 8.04 Peter 21106 94386 4.47
Update: Ich habe die Schaffung des regulären Ausdrucks für Peters Version eine statische Variable, und es RegexOptions.Compiled gesetzt, fair zu sein:
User Short * 1M Long * 100K Scale Peter 8997 74715 8.30
Pastebin Link zu meinem Test-Code, bitte korrigieren sie mich, wenn es falsch ist: http://pastebin.com/f64f260ee
Ein nit: bitte ändern 'pattern.Contains (original [i]) == false? Ersatz: original [i] 'to' pattern.Contains (original [i])? Original [i]: Ersatz. Das Vergleichen eines bool-Ausdrucks mit wahr/falsch ist nicht notwendig und wird normalerweise als schlechte Form angesehen. –
Ich habe Geschwindigkeitstests für alle diese Versionen durchgeführt, und Ihre neueste Bearbeitung ist tatsächlich die langsamste von allen, wie erhalten Sie Ergebnisse 4x schneller? –
@john, ich überprüfe sie erneut, in der Hoffnung, dass ich nicht etwas vermasselt habe, wie das Laden einer Webseite während des Tests :) – esac