2013-09-30 3 views
11

consideri un array di stringhe contenenti valori numerici:Qual è il modo più elegante per caricare una serie di stringhe in un elenco <int>?

string[] intArray = {"25", "65" , "0"}; 

Qual è il modo più elegante per caricare i numeri in un List<int> senza utilizzare un for o while per iterare il intArray?

+4

'elenco var = intArray.ToList(); '...? –

+0

Posso chiederti perché hai un array di stringhe di numeri testuali se lo vuoi veramente come numeri interi? Sempre, quando le persone fanno questo devo chiedere: qual è la possibilità che quell'array contenga qualcosa che non sia un numero? E se la probabilità è 0, perché non renderla invece una matrice numerica? –

+0

L'editor ha rimosso il mio dalla domanda !! È ancora nel titolo però. – bobbyalex

risposta

27

È possibile utilizzare Enumerable.Select metodo

List<int> intList = intArray.Select(str => int.Parse(str)).ToList(); 
3

Basta chiamare Select():

using System.Linq; 

var list = intArray.Select(x => Convert.ToInt32(x)); 

PS: La tua domanda è cambiato dopo ho inizialmente risposto.

18

(oltre alla risposta di Dmitry)
È possibile liberarsi di lambda, perché questo metodo ha già la firma giusta:

List<int> intList = intArray.Select(Int32.Parse).ToList(); 
+3

Si noti che facendo questo si assegnerà un nuovo delegato ogni volta che Dmitry utilizzerà uno in cache. –

+0

Questa è una buona scorciatoia per la versione di Dmitry. – bobbyalex

+5

@CoryNelson sei sicuro? –

2

Questa è la modo per farlo ..

string[] intArray = { "25", "65", "0" }; 
List<int> intList = new List<int>(Array.ConvertAll(intArray, s => int.Parse(s))); 

O

string[] intArray = { "25", "65", "0" }; 
List<int> intList = new List<int>(intArray.Select(int.Parse).ToArray()); 

O

string[] intArray = { "25", "65", "0" }; 
List<int> intList = new List<int>(Array.ConvertAll(intArray, int.Parse)); 
0

Sono sorpreso che nessuno aveva accennato int.TryParse

string[] intArray = { "25", "65", "0" }; 
int tempNumber; 
List<int> list = intArray.Select(r => int.TryParse(r, out tempNumber) 
            ? tempNumber : -1) 
        .ToList(); 

Questo si occuperebbe di ingressi non validi e restituisce -1 come valore. (Può essere qualsiasi numero che specifica un errore o 0)

Se il intArray conterrà solo analizzare interi capaci seguendo poi avrebbe fatto il lavoro:

List<int> list = intArray.Select(int.Parse).ToList();