249 votes

Diviser une chaîne de caractères, convertir ToList<int>() en une ligne

J'ai une chaîne qui contient des chiffres

string sNumbers = "1,2,3,4,5";

Je peux le diviser puis le convertir en List<int>

sNumbers.Split( new[] { ',' } ).ToList<int>();

Comment puis-je convertir un tableau de chaînes de caractères en liste d'entiers ? Pour que je puisse convertir string[] a IEnumerable

0 votes

Nous avons eu exactement la même question aujourd'hui : Cliquez sur moi

3 votes

En "une ligne" si une très forte est une exigence très stricte ! </perl>

2 votes

Cette question demande spécifiquement de diviser une chaîne de chiffres, ce qui rend la réponse simple. La question mentionnée par Dario traite (s'enlise dans ?) des problèmes de TryParse pour les chaînes de caractères générales.

6voto

Adrian Filip Points 51

Vous pouvez utiliser les nouvelles fonctionnalités du langage C# 6.0 :

  • remplacer le délégué (s) => { return Convert.ToInt32(s); } avec groupe de méthodes correspondant Convert.ToInt32
  • remplacer l'appel redondant du constructeur : new Converter<string, int>(Convert.ToInt32) avec : Convert.ToInt32

Le résultat sera :

var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32));

4voto

Pcodea Xonos Points 161

Vous pouvez également utiliser cette méthode d'extension

public static List<int> SplitToIntList(this string list, char separator = ',')
{
    return list.Split(separator).Select(Int32.Parse).ToList();
}

l'usage :

var numberListString = "1, 2, 3, 4";
List<int> numberList = numberListString.SplitToIntList(',');

3voto

HyoJin KIM Points 320

Sur Unity3d, int.Parse ne fonctionne pas bien. Donc j'utilise comme ci-dessous.

List<int> intList = new List<int>( Array.ConvertAll(sNumbers.Split(','),
 new Converter<string, int>((s)=>{return Convert.ToInt32(s);}) ) );

J'espère que cela aidera les utilisateurs d'Unity3d.

2voto

Carlos Toledo Points 955

Mon problème était similaire mais avec l'inconvénient que parfois la chaîne contient des lettres (parfois vides).

string sNumbers = "1,2,hh,3,4,x,5";

J'essaie de suivre la méthode Pcode Xonos Extension :

public static List<int> SplitToIntList(this string list, char separator = ',')
{
      int result = 0;
      return (from s in list.Split(',')
              let isint = int.TryParse(s, out result)
              let val = result
              where isint
              select val).ToList(); 
}

1voto

user3852812 Points 11

Pourquoi s'en tenir à int quand on a des génériques ? Et pourquoi pas une méthode d'extension comme :

    public static List<T> Split<T>(this string @this, char separator, out bool AllConverted)
    {
        List<T> returnVals = new List<T>();
        AllConverted = true;
        var itens = @this.Split(separator);
        foreach (var item in itens)
        {
            try
            {
                returnVals.Add((T)Convert.ChangeType(item, typeof(T)));
            }
            catch { AllConverted = false; }
        }
        return returnVals;
    }

et ensuite

 string testString = "1, 2, 3, XP, *, 6";
 List<int> splited = testString.Split<int>(',', out _);

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