2010-03-03 20 views
7

Czy istnieje sposób na konwersję tablic string na tablice int tak proste, jak parsowanie ciągu znaków na int w C#.C# string [] do int []

int a = int.Parse(”123”); 
int[] a = int.Parse(”123,456”.Split(’,’)); // this don't work. 

Próbowałem użyć metod rozszerzenia dla klasy int, aby dodać tę funkcję samodzielnie, ale nie stały się statyczne.

Każdy pomysł, jak to zrobić szybko i przyjemnie?

+1

LINQ powinien pozwolić, aby zrobić to w pojedyncza linia. Lub wyrażeń lambda. –

+2

Czy próbowałeś przeszukać tę stronę, zanim zapytałeś? –

Odpowiedz

17

To zapytanie LINQ powinien to zrobić:

strArray.Select(s => int.Parse(s)).ToArray() 
8
int[] a = Array.ConvertAll("123,456".Split(','), s => Int32.Parse(s)); 

powinno wystarczyć. Możesz zmodyfikować lambda, aby użyć TryParse, jeśli nie chcesz wyjątków.

+1

'Array.ConvertAll' zdecydowanie wymaga mniej reallocations niż LINQy' ToArray() '. Zauważ, że w tym przypadku nie potrzebujesz nawet lambda, możesz przekazać 'Int32.Parse' jako drugi parametr' ConvertAll'. –

3
”123,456”.Split(’,’).Select(s => int.Parse(s)).ToArray(); 
6
int[] a = "123,456".Split(’,’).Select(s => int.Parse(s)).ToArray(); 
3

Użyj tego:

"123,456".Split(',').Select(s => int.Parse(s)).ToArray() 
3

myślę tak:

string[] sArr = { "1", "2", "3", "4" }; 
int[] res = sArr.Select(s => int.Parse(s)).ToArray(); 
2

Oto metoda rozszerzenie. Odbywa się to za pomocą łańcucha znaków, ponieważ nie można dodać funkcji statycznej do łańcucha znaków.

public static int[] ToIntArray(this string value) 
{ 
    return value.Split(',') 
     .Select<string, int>(s => int.Parse(s)) 
     .ToArray<int>(); 
} 

Oto jak go używać

string testValue = "123, 456,789"; 

int[] testArray = testValue.ToIntArray(); 

zakłada to chcesz podzielić na „” jeśli nie to trzeba zmienić ToIntArray

+2

Bardzo niesamowite, właśnie tego szukałem. Dzięki! –