Mit LINQ entfernen Sie Vokale aus der Zeichenfolge

8

Ich möchte Vokale aus dem String-Array entfernen, aber ich habe es jetzt mit foreach-Loops gemacht möchte es mit LINQ oder Lambda Ausdruck ausführen

Ich habe den folgenden Code LINQ versucht

%Vor%

Aber ich bekomme nicht, was erwartet wird.

Ausgabe, die ich mit der obigen Abfrage bekomme, ist: -

%Vor%

Gewünschte Ausgabe:

%Vor%     
ghargedeepak 20.02.2014, 09:01
quelle

3 Antworten

7

Obwohl Yaakovs reg-ex-Lösung in puncto Eleganz und Effizienz viel besser ist, können Sie Where dafür verwenden um des Lernens willen:

%Vor%     
Matthias Meid 20.02.2014, 09:07
quelle
13

Sie können dies sehr effizient mit regulären Ausdrücken erreichen, um alle Vokale zu vergleichen und sie durch leere Zeichenfolgen zu ersetzen:

%Vor%

Dies gibt die gesuchten Ausgaben zurück.

Dein ursprünglicher Versuch hat nicht funktioniert, weil er jedes Wort für jeden einzelnen Vokal, den er enthielt, einzeln ausgewertet hat.

Update : Ich habe einige grundlegende Benchmarks dieser Lösung im Vergleich zu Mathias ' HashSet<char> based solution ( Benchmark-Code hier ), einschließlich Compile- und Noncompiled-Versionen der Regex-Version. Ich habe es gegen eine Reihe von 2582 Lorem-Ipsum-Wörtern gelaufen, die 10 Millionen Mal gegen das Set iteriert haben (also etwa 25 Milliarden Wörter) und es in LinqPad laufen lassen, wobei ich den Durchschnitt von 3 Läufen genommen habe:

%Vor%

Es stellt sich heraus, dass wenn Sie nur HashSet und pattern string einmal initialisieren, haben sie eine sehr ähnliche Leistung. Regex schlägt Hashset , aber nur knapp (80 ms schneller als 25 Milliarden Wörter) und Regex Compiled und Noncompiled arbeiten fast identisch. Wenn Sie das HashSet jedoch jedes Mal initialisieren, wenn Sie es ausführen, wird die Leistung für den HashSet-Ansatz beendet.

Wenn Sie den HashSet -Ansatz verwenden möchten, sollten Sie sicherstellen, dass Sie HashSet nur einmal pro Satz von Zeichen, die Sie ausschließen möchten, initialisieren.

    
Yaakov Ellis 20.02.2014 09:09
quelle
1

Regex Replace ist der beste Weg, dies zu tun.

%Vor%     
bskehil 20.02.2014 09:18
quelle

Tags und Links