web-dev-qa-db-fra.com

Fractionner la chaîne, convertir ToList <int> () sur une ligne

J'ai une ficelle qui a des nombres

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

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

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

Comment puis-je convertir un tableau de chaînes en liste entière? Pour que je puisse convertir string[] en IEnumerable

164
uzay95
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
410
mqp

Vous pouvez également le faire de cette façon sans avoir besoin de Linq:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );

// Uses Linq
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList();
28
Joze

La façon dont Joze a aussi besoin de LINQ, ToList() se trouve dans System.Linq espace de nom.

Vous pouvez convertir un tableau en liste sans Linq en passant le tableau au constructeur de liste:

List<int> numbers = new List<int>( Array.ConvertAll(sNumbers.Split(','), int.Parse) );
17
yuxio

Il est également possible d'int array pour assigner directement une valeur.

comme ça

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
8
Mukesh Kalgude

Mieux vaut utiliser int.TryParse pour éviter les exceptions;

var numbers = sNumbers
            .Split(',')
            .Where(x => int.TryParse(x, out _))
            .Select(int.Parse)
            .ToList();
5
aozogul

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 cette aide pour les utilisateurs Unity3d.

3
HyoJin KIM

aussi vous pouvez utiliser cette méthode d'extension

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

usage:

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

Mon problème était similaire mais avec le désagrément que parfois la chaîne contient des lettres (parfois vides).

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

Essayer de suivre la méthode d'extension Pcode Xonos:

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(); 
}
1
Carlos Toledo

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

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

Le résultat sera:

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