2010-06-02 10 views
62

Ich habe eine Funktion (Tointarray), um eine Zeichenfolge in ein Array von Ints konvertieren, aber ich bin nicht sehr zufrieden damit. Es macht den Job, aber es muss eine elegantere Möglichkeit geben, dies zu tun, und vielleicht LINQ könnte hier helfen. Leider bin ich in LINQ nicht sehr gut. Gibt es einen besseren Weg?Konvertieren Zeichenfolge in Int-Array mit LINQ

Meine Funktion:

{ 
    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; 
} 

Antwort

190

This Post fragte eine ähnliche Frage und verwendet LINQ, um es zu lösen, vielleicht wird es Ihnen auch helfen.

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

würde ich int.Parse tho verwenden. – Femaref

+0

@Femaref macht einen guten Punkt! Danke ... – JSprang

+4

langs.Split (';'). Wähle (int.Parse) .ToArray() –

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

Ungeprüfte und aus der Spitze von meinem Kopf ... Testen jetzt korrekte Syntax.

Getestet und alles sieht gut aus.

+1

Sie können nicht tun, nur: 's1.Split (';') Wählen Sie (Convert.ToInt32) .ToArray();' – strager

+1

@strager - Nein, diese Aussage. kompiliert nicht. –

+1

@strager, anscheinend können Sie nicht mit .Net 4.0. Du träumst in Python;) –

7

Hier ist Code, die ungültige Felder filtert:

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

+1 Ich habe Scrollen versucht zu finden Die Lösung entspricht dem OP-Code. Leider ist dies weniger effizient, da es den Int zweimal analysieren muss. – xr280xr

15

Eigentlich richtige 12.59 Implementierung ist:

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

Sie können stattdessen JSprangs Lösung ein bisschen unter Verwendung eines Verfahrens Gruppe verkürzen :

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; 
    } 

Referenz:

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