85 votes

Linq: convertit une chaîne en tableau int

Double Possible:
C#: il y a une LINQ façon de créer un tableau d'objets donné un tableau des paramètres du constructeur?

J'ai une fonction (tointarray) pour convertir une chaîne en un tableau d'entiers, mais je ne suis pas très satisfait avec elle. il fait le travail, mais il doit y avoir une façon plus élégante de le faire, peut-être Linq pourrait aider ici. malheureusement, je ne suis pas très bon dans Linq. savez-vous une meilleure façon? ma fonction:

{
    string s1 = "1;2;3;4;5;6;7;8;9;10;11;12";
    int[] ia = tointarray(s1, ';');
}
int[] tointarray(string value, char sep)
{
    string[] sa = value.Split(sep);
    int[] ia = new int[sa.Length];
    for (int i = 0; i < ia.Length; ++i)
    {
        int j;
        string s = sa[i];
        if (int.TryParse(s, out j))
        {
            ia[i] = j;
        }                 
    }
    return ia;
}

231voto

JSprang Points 3304

Ce message posait une question similaire et utilisait LINQ pour le résoudre. Peut-être que cela vous aiderait aussi.

 string s1 = "1;2;3;4;5;6;7;8;9;10;11;12";
int[] ia = s1.Split(';').Select(n => Convert.ToInt32(n)).ToArray();
 

41voto

Buginator Points 302

Vous pouvez réduire un peu la solution JSprangs en utilisant plutôt un groupe de méthodes:

 string s1 = "1;2;3;4;5;6;7;8;9;10;11;12";
int[] ints = s1.Split(';').Select(int.Parse).ToArray();
 

18voto

Justin Niessner Points 144953
 s1.Split(';').Select(s => Convert.ToInt32(s)).ToArray();
 

Non testé et sur le dessus de ma tête ... testons maintenant pour la syntaxe correcte.

Testé et tout va bien.

18voto

Jakub Šturc Points 12549

En réalité, une implémentation correcte est la suivante:

 int n;
int[] ia = s1.Split(';').Select(s => int.TryParse(s, out n) ? n : 0).ToArray();
 

8voto

David Gladfelter Points 2756

Voici le code qui filtre les champs non valides:

     var ints = from field in s1.Split(';').Where((x) => { int dummy; return Int32.TryParse(x, out dummy); })
               select Int32.Parse(field);
 

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