5 votes

Problème de manipulation de chaîne

Si j'ai une variable de chaîne de caractères avec la valeur suivante :-

string mystring = "TYPE1, TYPE1, TYPE2, TYPE2, TYPE3, TYPE3, TYPE4, TYPE4";

et je veux manipuler cette chaîne de caractères et la mettre comme suit :-

string mystring = "TYPE1,TYPE2,TYPE3,TYPE4";

c'est-à-dire que je veux juste supprimer tous les doublons, comment devrais-je faire ?

S'il vous plaît aidez-moi. Merci.

11voto

Jon Skeet Points 692016

Eh bien, voici une approche LINQ :

string deduped = string.Join(",", original.Split(',')
                                          .Select(x => x.Trim())
                                          .Distinct());

Notez que j'utilise Trim car votre chaîne d'origine a un espace avant chaque élément, mais ce n'est pas le cas pour le résultat.

Distinct() ne garantit pas réellement que l'ordre sera préservé, mais l'implémentation actuelle le fait, et c'est aussi la plus naturelle. Je trouve difficile d'imaginer que cela changera.

Si vous utilisez .NET 3.5, vous aurez besoin d'un appel à .ToArray() après Distinct() car il y a moins de surcharges de string.Join avant .NET 4.

2voto

Maximilian Mayerl Points 6335

Vous pouvez faire ce qui suit :

var parts = mystring.Split(',').Select(s => s.Trim()).Distinct().ToList();
string newString = String.Join(",", parts);

1voto

ChrisBint Points 7872
chaîne mystring = "TYPE1, TYPE1, TYPE2, TYPE2, TYPE3, TYPE3, TYPE4, TYPE4";

var split = mystring.Split(',');
var distinct = (from s in split select s).Distinct();

1voto

Robert Koritnik Points 45499

Une ligne

string result = string.Join(",", mystring.Split(',').Select(s => s.Trim()).Distinct());

Commande?

Vous pouvez également ajouter OrderBy() dans la ligne pour trier vos chaînes si nécessaire.

1voto

Connell Watkins Points 5302

Je choisirais personnellement l'option Linq de la réponse de Jon Skeet, j'ai donc également voté pour cela, mais juste pour vous donner une autre option

List parts = new List();
foreach(string split in mystring.Split(','))
    if(!parts.Contains(split))
        parts.Add(split);

string newstr = "";
foreach(string part in parts)
    newstr += part + ",";

Cela fonctionnera également dans les anciennes versions de C#.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X