2010-06-02 26 views
62

Tôi có một hàm (tointarray) để chuyển đổi một chuỗi thành một mảng int, nhưng tôi không hài lòng lắm với nó. Nó làm công việc, nhưng phải có một cách thanh lịch hơn để làm điều này, và có lẽ LINQ có thể giúp đỡ ở đây. Thật không may tôi không phải là rất tốt trong LINQ. Có cách nào tốt hơn?Chuyển đổi chuỗi thành mảng int bằng cách sử dụng LINQ

chức năng của tôi:

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

Trả lời

190

This bài đăng hỏi một câu hỏi tương tự và đã sử dụng LINQ để giải quyết nó, có thể nó cũng sẽ giúp bạn.

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

Tôi sẽ sử dụng int.Parse tho. – Femaref

+0

@Femaref làm cho một điểm tốt! Cảm ơn ... – JSprang

+4

langs.Split (';'). Chọn (int.Parse) .ToArray() –

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

chưa được kiểm tra và ra khỏi đỉnh đầu của tôi ... kiểm tra ngay bây giờ cho đúng cú pháp.

Đã kiểm tra và mọi thứ đều ổn.

+1

thể bạn không chỉ cần làm: 's1.Split (';') Chọn (Convert.ToInt32) .ToArray();' – strager

+1

@strager - Không, tuyên bố đó. không biên dịch. –

+1

@strager, dường như bạn không thể sử dụng .Net 4.0. Bạn đang mơ ước bằng Python;) –

7

Dưới đây là code để lọc ra trường không hợp lệ:

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

+1 Tôi tiếp tục di chuyển cố gắng tìm giải pháp tương đương với mã OP. Thật không may điều này là kém hiệu quả vì nó phải phân tích cú pháp int hai lần. – xr280xr

15

Trên thực tế đúng 1-1 thực hiện là:

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

Bạn có thể rút ngắn JSprangs giải pháp một chút bằng cách sử dụng một nhóm phương pháp thay :

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

tham khảo:

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

Các vấn đề liên quan