2010-03-03 30 views
7

Có cách nào chuyển đổi mảng chuỗi thành mảng int dễ dàng như phân tích cú pháp chuỗi thành int trong C# hay không.C# string [] tới int []

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

Tôi đã thử sử dụng các phương pháp mở rộng cho lớp int để tự thêm chức năng này nhưng chúng không trở nên tĩnh.

Bất kỳ ý tưởng nào về cách thực hiện điều này nhanh chóng và tốt đẹp?

+1

LINQ ought cho phép bạn làm điều này trong một dòng. Hay biểu thức lambda. –

+2

Bạn đã thử tìm kiếm trang này trước khi bạn hỏi chưa? –

Trả lời

17

truy vấn LINQ này nên làm điều đó:

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

nên làm tốt. Bạn có thể sửa đổi lambda để sử dụng TryParse nếu bạn không muốn ngoại lệ.

+1

'Array.ConvertAll' chắc chắn đòi hỏi ít sự phân bổ hơn LINQy' ToArray() '. Lưu ý rằng trong trường hợp này, bạn thậm chí không cần một lambda, bạn có thể chuyển 'Int32.Parse' làm tham số thứ hai của' ConvertAll'. –

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

Sử dụng này:

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

Tôi nghĩ, như thế:

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

Dưới đây là phương pháp mở rộng. Điều này được thực hiện trên chuỗi, bởi vì bạn không thể thêm một hàm tĩnh vào một chuỗi.

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

Đây là cách bạn sử dụng nó

string testValue = "123, 456,789"; 

int[] testArray = testValue.ToIntArray(); 

này giả định bạn muốn chia trên '' nếu không thì bạn phải thay đổi ToIntArray

+2

Rất tuyệt vời, chỉ là những gì tôi đang tìm kiếm. Cảm ơn! –

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