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
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList();
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();
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) );
Il est également possible d'int array pour assigner directement une valeur.
comme ça
int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray();
Mieux vaut utiliser int.TryParse
pour éviter les exceptions;
var numbers = sNumbers
.Split(',')
.Where(x => int.TryParse(x, out _))
.Select(int.Parse)
.ToList();
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.
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(',');
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();
}
Vous pouvez utiliser les nouvelles fonctionnalités du langage C # 6.0:
(s) => { return Convert.ToInt32(s); }
par le groupe de méthodes correspondant Convert.ToInt32
new Converter<string, int>(Convert.ToInt32)
par: Convert.ToInt32
Le résultat sera:
var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32));