2009-05-26 18 views
126

ho una stringa che ha numeriSplit stringa, convertire ToList <int>() in una riga

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

posso dividerlo quindi convertirlo in List<int>

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

Come posso convertire array di stringhe alla lista dei numeri interi? In modo che sarò in grado di convertire string[] a IEnumerable

+3

in " una linea "si a very strong è un requisito molto severo! – dfa

+0

Abbiamo avuto esattamente la stessa domanda oggi: [Click me] (http://stackoverflow.com/questions/910119/how-to-create-a-listt-from-a-comma-separated-string) – Dario

+2

Questa domanda in particolare dice di dividere una stringa di numeri, che semplifica la risposta. La domanda Dario ha menzionato i problemi di maniglie (impantanati in?) Di TryParse per le stringhe generali. – goodeye

risposta

311
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList(); 
+0

Risposta troppo rapida :) – uzay95

+34

L'ultima parte può essere sostituita con .Select (int.Parse) .ToList(); – Amit

+2

questo richiede Linq, cosa succede se si utilizza .net precedente? (Grazie) – nycynik

25

È anche possibile fare in questo modo, senza la necessità di Linq:

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

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

modo di Joze anche bisogno di LINQ, ToList() è in System.Linq namespace.

È possibile convertire Array nella Lista senza Linq passando l'array to List costruttore:

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

Su Unity3d, int.Parse non funziona bene. Quindi uso come muggito.

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

Spero che questo aiuto per gli utenti Unity3d.

3

Inoltre è possibile utilizzare questo metodo di estensione

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

utilizzo:

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

Il mio problema era simile, ma con l'inconveniente che a volte la stringa contiene lettere (a volte vuoto).

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

cercando di seguire Pcode Xonos Metodo di estensione:

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(); 
} 
+0

Grazie, anche se dichiari un separatore e poi non lo fai usarlo –

3

È anche possibile int matrice per dirigere assegnare il valore.

come questo

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

È possibile utilizzare questo:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList(); 
+1

Benvenuti in Stack Overflow! Anche se questo snippet di codice può risolvere la domanda, [inclusa una spiegazione] (// meta.stackexchange.com/questions/114762/explaining-entely-code-based-answers) aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. Cerca anche di non affollare il tuo codice con commenti esplicativi, in quanto ciò riduce la leggibilità sia del codice che delle spiegazioni! – FrankerZ

1

È possibile utilizzare la nuova C 6 #.0 linguistici Caratteristiche:

  • sostituiscono delegato (s) => { return Convert.ToInt32(s); } con corrispondente metodo gruppo Convert.ToInt32
  • sostituire chiamata al costruttore ridondante: new Converter<string, int>(Convert.ToInt32) con: Convert.ToInt32

Il risultato sarà:

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