2009-05-26 15 views
126

Tôi có một chuỗi có sốChia chuỗi, chuyển đổi ToList <int>() trong một dòng

string sNumbers = "1,2,3,4,5"; 

tôi có thể chia nó sau đó chuyển nó sang List<int>

sNumbers.Split(new[] { ',' }).ToList<int>(); 

Làm thế nào tôi có thể chuyển đổi mảng chuỗi vào danh sách số nguyên? Vì vậy mà tôi sẽ có thể chuyển đổi string[] để IEnumerable

+3

trong " một dòng "si rất mạnh là một yêu cầu rất nghiêm ngặt! – dfa

+0

Chúng tôi đã có cùng một câu hỏi ngay hôm nay: [Nhấp vào tôi] (http://stackoverflow.com/questions/910119/how-to-create-a-listt-from-a-comma-seperated-string) – Dario

+2

Câu hỏi này cụ thể nói để tách một chuỗi các số, giữ cho câu trả lời đơn giản. Câu hỏi mà Dario đề cập đến là các vấn đề của TryParse đối với các chuỗi chung. – goodeye

Trả lời

311
var numbers = sNumbers.Split(',').Select(Int32.Parse).ToList(); 
+0

Câu trả lời quá nhanh :) – uzay95

+34

Phần cuối cùng có thể được thay thế bằng .Select (int.Parse) .ToList(); – Amit

+2

điều này đòi hỏi Linq tho, nếu bạn đang sử dụng cũ hơn. (cảm ơn) – nycynik

25

Bạn cũng có thể làm theo cách này mà không cần LINQ:

List<int> numbers = new List<int>(Array.ConvertAll(sNumbers.Split(','), int.Parse)); 

// Uses Linq 
var numbers = Array.ConvertAll(sNumbers.Split(','), int.Parse).ToList(); 
13

cách Jože cũng cần LINQ, ToList() là trong System.Linq không gian tên.

Bạn có thể chuyển đổi mảng vào danh sách mà không LINQ bằng cách truyền mảng vào danh sách constructor:

List<int> numbers = new List<int>(Array.ConvertAll(sNumbers.Split(','), int.Parse)); 
3

On Unity3d, int.Parse không hoạt động tốt. Vì vậy, tôi sử dụng như dưới đây.

List<int> intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), 
new Converter<string, int>((s)=>{return Convert.ToInt32(s);}))); 

Hy vọng trợ giúp này dành cho người dùng Unity3d.

3

bạn cũng có thể sử dụng phương pháp mở rộng này sử dụng

public static List<int> SplitToIntList(this string list, char separator = ',') 
{ 
    return list.Split(separator).Select(Int32.Parse).ToList(); 
} 

:

var numberListString = "1, 2, 3, 4"; 
List<int> numberList = numberListString.SplitToIntList(','); 
1

Vấn đề của tôi là tương tự nhưng với sự bất tiện mà đôi khi các chuỗi chứa chữ cái (đôi khi trống).

string sNumbers = "1,2,hh,3,4,x,5"; 

Cố gắng làm theo pcode Xonos Phương pháp mở rộng:

public static List<int> SplitToIntList(this string list, char separator = ',') 
{ 
     int result = 0; 
     return (from s in list.Split(',') 
       let isint = int.TryParse(s, out result) 
       let val = result 
       where isint 
       select val).ToList(); 
} 
+0

Cảm ơn, mặc dù bạn khai báo dấu tách và sau đó bạn don ' t sử dụng nó. –

3

Nó cũng có thể int mảng chỉ đạo giá trị assign.

như thế này

int[] numbers = sNumbers.Split(',').Select(Int32.Parse).ToArray(); 
0

Bạn có thể sử dụng này:

List<Int32> sNumberslst = sNumbers.Split(',').ConvertIntoIntList(); 
+1

Chào mừng bạn đến với Stack Overflow! Mặc dù đoạn mã này có thể giải quyết được câu hỏi, [bao gồm cả giải thích] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. Ngoài ra, hãy cố gắng không gắn mã của bạn với các nhận xét giải thích vì điều này làm giảm khả năng đọc của cả mã và giải thích! – FrankerZ

1

Bạn có thể sử dụng mới C# 6.0 Các tính năng Ngôn ngữ:

  • thay thế đại biểu (s) => { return Convert.ToInt32(s); } với nhóm phương pháp tương ứng Convert.ToInt32
  • thay thế cuộc gọi constructor dư thừa: new Converter<string, int>(Convert.ToInt32) với: Convert.ToInt32

Kết quả sẽ là:

var intList = new List<int>(Array.ConvertAll(sNumbers.Split(','), Convert.ToInt32)); 
Các vấn đề liên quan