0
votes

C # remplacer toutes les voyelles dans la liste générique

Comment puis-je remplacer toutes les voyelles de la liste avec un espace? Le code suivant ne semble pas fonctionner.

cll
gtr
vln


2 commentaires

De: remplacer (w, "")); À: remplacer (w, ""));


ne semble pas fonctionner


6 Réponses :


1
votes

Vous devez utiliser. Sélectionner si nécessaire de modifier les valeurs de la collecte:

List<string> Instruments = new List<string>();

        Instruments.Add("cello");
        Instruments.Add("guitar");
        Instruments.Add("violin");
        Instruments.Add("double bass");

        var regex = new Regex("^a|e|i|o|u", RegexOptions.IgnoreCase);

        var withoutVowels = from instr in Instruments
            select regex.Replace(instr, string.Empty);

        foreach (var item in withoutVowels)
        {
            Console.WriteLine(item);
        }


0 commentaires

2
votes

Essayez ceci xxx


2 commentaires

Pourrait voyelles être hashset à la place?


@Hardywest juste par la pratique. Je recommande d'apprendre sur Collections et Linq.



0
votes

Un peu rapide et sale, mais cela fonctionne pour moi. XXX


1 commentaires

Pensez à définir la capacité de de NewList à la longueur de de instruments .



0
votes

instruments code> a une collection de string code> ou mots, y compris. Votre .foreseach code> iTère via cette collection où chaque instance est w code>, mais vous n'affectez pas ces cas avec votre utilisation de .replace code> ici, Vous les utilisez dans une opération pour affecter la chaîne VOWELLES code>.

voir string.replace documentation msn. p>

En tant que tel, vous devez également parcourir vos voyelles code> chaîne code> et utilisez l'instance caractère code> de VOWELLES code>: w.replace (v, "") code >, où w code> est votre instance de mot dans instruments code> et v code> est votre instance vocale dans voyelles code>: p>

Donc, il devrait être instruments.foreach (w => foreach (vowelchar in vowels.split ("")) {w.replit (vowelchar, "");}); code> P>

Remarque: @mjwills a souligné l'autre problème avec cette opération dans les commentaires. L'affectation à w code> ne persiste pas ici. Donc, vous devrez créer une nouvelle liste code> de manière à la persister (le déclarer avant de la main et l'ajouter à l'itération ou utilisez LINQ .tolist code> Extension du iEnumerable code>. p>


Cependant, c'est inefficace car vous créez essentiellement un char [] code> de voyelles code> chaîne code> à l'aide de .split code> sur chaque itération de instruments code>. p>

p>

devrait définir votre voyelles code> en tant que char [] code> pour éviter la nécessité de cette opération: var chevaux = nouveau char [] {'A', 'E', 'I', 'O', 'U', 'Y'}; CODE> P>

    List<string> results = new List<string>();
    Instruments.ForEach(w => {
        foreach (char v in vowels) {
           results.Add(w.Replace(v, ' '));
        }
    });

    results.ForEach(w => Console.WriteLine(w));


0 commentaires

0
votes

Vous pouvez essayer la même chose avec regex: xxx


0 commentaires

0
votes

Cela fonctionne bien pour moi: xxx

i get: xxx


0 commentaires