2013-09-30 10 views
11

Rozważmy tablicę ciągów zawierających wartości liczbowe:Jaki jest najbardziej elegancki sposób załadowania tablicy łańcuchów do listy <int>?

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

Jaki jest najbardziej elegancki sposób, aby załadować numery do List<int> bez użycia for lub while iteracyjne nad intArray?

+4

'listy var = intArray.ToList(); "...? –

+0

Czy mogę zapytać, dlaczego masz ciąg tablic z liczbami tekstowymi, jeśli naprawdę chcesz, aby były liczbami całkowitymi? Zawsze, kiedy ludzie to robią, muszę zapytać: Jaka jest szansa, że ​​tablica zawiera coś, co nie jest liczbą? A jeśli szansa jest równa 0, to dlaczego nie uczynić z niej tablicy numerycznej? –

+0

Edytor usunął moje z pytania !! Nadal jest w tytule. – bobbyalex

Odpowiedz

27

Można użyć Enumerable.Select metodę

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

Wystarczy zadzwonić Select():

using System.Linq; 

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

PS: Twoje pytanie zmieniło po tym jak początkowo odpowiedział.

18

(dodatek do odpowiedzi Dmitry za)
można pozbyć lambda, ponieważ ta metoda ma już odpowiednią Podpis:

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

Należy pamiętać, że wykonanie tej czynności spowoduje przydzielenie nowego delegata za każdym razem, podczas gdy Dmitry użyje bufora podręcznego. –

+0

To jest dobry skrót do wersji Dmitry'ego. – bobbyalex

+5

@CoryNelson jesteś pewien? –

2

to jest sposób na zrobienie tego ..

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

LUB

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

LUB

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

Dziwię się, że nikt nie wspomniał int.TryParse

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

To czynienia z nieprawidłowymi wejść i zwraca -1 jako wartość. (może to być dowolny numer określający błąd lub 0)

Jeśli intArray będzie zawierać tylko liczby całkowite następnie zanalizować zdolnych zrobi następujące roboty:

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