2010-06-02 13 views
62

Mam funkcję (tointarray), aby przekonwertować ciąg na tablicę intów, ale nie jestem z niego bardzo zadowolony. Wykonuje to zadanie, ale musi być na to bardziej elegancki sposób, a być może pomoże tutaj LINQ. Niestety nie jestem zbyt dobry w LINQ. Czy istnieje lepszy sposób?Konwertuj ciąg na tablicę int używając LINQ

Moja funkcja:

{ 
    string s1 = "1;2;3;4;5;6;7;8;9;10;11;12"; 
    int[] ia = tointarray(s1, ';'); 
} 
int[] tointarray(string value, char sep) 
{ 
    string[] sa = value.Split(sep); 
    int[] ia = new int[sa.Length]; 
    for (int i = 0; i < ia.Length; ++i) 
    { 
     int j; 
     string s = sa[i]; 
     if (int.TryParse(s, out j)) 
     { 
      ia[i] = j; 
     } 
    } 
    return ia; 
} 

Odpowiedz

190

This post zadał podobne pytanie i użył LINQ, aby go rozwiązać, może ci też pomoże.

string s1 = "1;2;3;4;5;6;7;8;9;10;11;12"; 
int[] ia = s1.Split(';').Select(n => Convert.ToInt32(n)).ToArray(); 
+1

Chciałbym użyć int.Parse tho. – Femaref

+0

@Femaref ma dobry punkt! Dzięki ... – JSprang

+4

langs.Split ("; '). Wybierz (int.Parse) .ToArray() –

17
s1.Split(';').Select(s => Convert.ToInt32(s)).ToArray(); 

wypróbowane i są z góry na głowie ... testuje teraz do poprawnej składni.

Testowane i wszystko wygląda dobrze.

+1

nie można po prostu zrobić: 's1.Split (';') Wybrać (Convert.ToInt32) .ToArray();' – strager

+1

@strager - Nie, to stwierdzenie. nie kompiluje się. –

+1

@strager, najwyraźniej nie można do tego przy użyciu .Net 4.0. Marzysz w Pythonie;) –

7

Oto kod, który odfiltrowuje nieprawidłowe pola:

var ints = from field in s1.Split(';').Where((x) => { int dummy; return Int32.TryParse(x, out dummy); }) 
       select Int32.Parse(field); 
+0

+1 Ciągle przewijam, próbując znaleźć rozwiązanie równoważne z kodem OPs. Niestety jest to mniej wydajne, ponieważ musi dwa razy analizować int. – xr280xr

15

Właściwie prawidłowa 12:59 wdrożenia jest:

int n; 
int[] ia = s1.Split(';').Select(s => int.TryParse(s, out n) ? n : 0).ToArray(); 
28

można skrócić rozwiązanie JSprangs nieco stosując grupę metody zamiast :

string s1 = "1;2;3;4;5;6;7;8;9;10;11;12"; 
int[] ints = s1.Split(';').Select(int.Parse).ToArray(); 
1
public static int[] ConvertArray(string[] arrayToConvert) 
    { 
     int[] resultingArray = new int[arrayToConvert.Length]; 

     int itemValue; 

     resultingArray = Array.ConvertAll<string, int> 
      (
       arrayToConvert, 
       delegate(string intParameter) 
       { 
        int.TryParse(intParameter, out itemValue); 
        return itemValue; 
       } 
      ); 

     return resultingArray; 
    } 

referencyjny:

http://codepolice.net/convert-string-array-to-int-array-and-vice-versa-in-c/