Ich suche nach einer Methode, die zwei Zeichenfolgen verwendet und die Anzahl der Zeichen zurückgibt, die beiden gemeinsam sind:
"G010" & amp; "G1820A" sollte 3 zurückgeben, da die Zeichen G, 0 und 1 in beiden existieren.
Wenn ein Zeichen zweimal in beiden vorhanden ist, sollten sie wie folgt getrennt gezählt werden:
"G12AA" & amp; "GAA2" sollte 4 zurückgeben, da die Zeichen G, A, A und 2 in beiden existieren.
Irgendwelche Hilfe dabei? Google-Suchanfragen waren bisher nicht sehr hilfreich.
Okay, wie wäre es damit, es hat den Vorteil, dass Sie die Lazy-Evaluierung maximieren und die String-Manipulation minimieren.
%Vor%Im Wesentlichen gruppiert es jede Seite mit Char und findet dann Zeichen, die auf beiden Seiten eine Gruppe haben. Die übereinstimmenden Gruppen werden im Tandem gezählt, bis einer der beiden ausläuft. Diese Zählungen werden summiert, um das Ergebnis zu erzeugen.
Es wäre trivial, dies generisch für zwei beliebige Sequenzen durchzuführen. Siehe unten,
%Vor%Was würdest du so benutzen?
%Vor% Der optionale Parameter comparer
kann sich als nützlich erweisen, wenn Sie eine Groß- / Kleinschreibung oder andere spezielle Behandlung benötigen.
Im Interesse der Wiedererlangbarkeit wäre ich versucht, die Sum()
zu entfernen und eine IEnumerable<T>
zurückzugeben und dann dem Aufruf eine Summe hinzuzufügen, so
Sie könnten das leicht tun
%Vor%oder nur das Original
%Vor%Sie könnten Linq verwenden, um dieses Problem zu lösen, indem Sie etwas wie folgt verwenden:
%Vor%commonChars hat den Wert 3. Die FindCommonElements-Methode wurde von dieser Frage inspiriert: Wie mache ich eine Integer-Liste Schnittpunkt, während Duplikate beibehalten?
Bitte überprüfen Sie den folgenden Code - & gt; src ist die erste Zeichenfolge, während chk die zweite Zeichenfolge ist
var count = 0; var i = 0; src.ToList (). ForEach ((x) = & gt;) while (chk.Substring (i) .IndexOf (x) & gt; = 0) {
zählen ++; i ++; wenn (i & gt; chk.Length) bricht; }
});
Tags und Links string c# linq string-comparison stringcomparer