2011-12-21 45 views
61

Có cách nào nhanh chóng để chuyển đổi List<string> thành một dấu phẩy được phân cách bằng dấu phẩy string trong C#?Chuyển đổi 'Danh sách <string>' thành chuỗi được phân tách bằng dấu phẩy

Tôi làm như vậy nhưng có thể có cách nhanh hơn hoặc hiệu quả hơn?

List<string> ls = new List<string>(); 
ls.Add("one"); 
ls.Add("two"); 
string type = string.Join(",", ls.ToArray()); 

PS: được tìm kiếm trên trang web này nhưng hầu hết các giải pháp dành cho Java hay Python

+2

Nope, bạn đang làm đúng. Mặc dù tôi không nghĩ rằng bạn cần phải làm 'ToArray()'. – Yuck

+2

Nhanh hơn để viết hoặc thực thi nhanh hơn? –

+0

Both :), Nhưng dường như không thể – Ozkan

Trả lời

98

Trong .NET 4 bạn không cần cuộc gọi ToArray() - string.Join is overloaded để chấp nhận IEnumerable<T> hoặc chỉ IEnumerable<string>.

Có nhiều cách hiệu quả hơn để thực hiện nó trước .NET 4, nhưng bạn có thực sự cần chúng không? Đây thực sự là một nút cổ chai trong mã của bạn?

Bạn có thể lặp lại trong danh sách, tìm ra kích thước cuối cùng, phân bổ một kích thước chính xác, sau đó tự mình tham gia. Điều đó sẽ tránh được mảng phụ được xây dựng vì ít lý do - nhưng nó sẽ không tiết kiệm được nhiều thời gian và nó sẽ là một mã nhiều hơn lot.

+12

Nhưng các nhà phát triển được trả tiền trong LOC, phải không? .... phải không? – Yuck

+11

chuỗi.Tham gia (",", myList) – Mahesh

0

Đó là cách tôi muốn xem liệu tôi đã duy trì mã của bạn. Nếu bạn quản lý để tìm một giải pháp nhanh hơn, nó sẽ rất bí truyền, và bạn thực sự nên chôn nó bên trong một phương pháp mô tả những gì nó làm.

(hiện nó vẫn hoạt động mà không có ToArray)?

+1

Tôi có thể làm 'string.Join' chỉ trên' mảng 'của 'chuỗi'. Vì vậy, nó là cần thiết (vì tôi không sử dụng '.NET 4' – Ozkan

13

Sau đây sẽ dẫn đến danh sách được phân cách bằng dấu phẩy. Hãy chắc chắn bao gồm một tuyên bố sử dụng cho System.Linq

List<string> ls = new List<string>(); 
ls.Add("one"); 
ls.Add("two"); 
string type = ls.Aggregate((x,y) => x + "," + y); 

sẽ mang lại một, hai

nếu bạn cần một không gian sau dấu phẩy, chỉ cần thay đổi dòng cuối cùng để string type = ls.Aggregate((x,y) => x + ", " + y);

+0

Thời gian thực hiện của điều này có nhanh hơn mã tôi đã viết không? – Ozkan

+0

@Ozkan Vui lòng kiểm tra và cho chúng tôi biết. –

+0

thực sự, tôi đã không kiểm tra. Chỉ với hai mục trong Danh sách, không, chúng đều bằng nhau, nhưng phát nổ nó đến 100.000 mục, tổng hợp thực sự chậm hơn nhiều so với chuỗi.Join. Tốt để biết tôi đoán. Tôi đã ưa thích Tổng hợp trong quá khứ, nhưng tôi nghĩ rằng tôi sẽ chuyển sang chuỗi.Trong tương lai –

3

Follow này:

 List<string> name = new List<string>(); 

     name.Add("Latif"); 

     name.Add("Ram"); 

     name.Add("Adam"); 
     string nameOfString = (string.Join(",", name.Select(x => x.ToString()).ToArray())); 
8

Để mở rộng trên Jon Skeets, hãy trả lời mã này trong số .Net 4 là:

string myCommaSeperatedString = string.Join(",",ls); 
0
static void Main(string[] args) 
{ 
    List<string> listStrings = new List<string>(){ "C#", "Asp.Net", "SQL Server", "PHP", "Angular"}; 
    string CommaSeparateString = GenerateCommaSeparateStringFromList(listStrings); 
    Console.Write(CommaSeparateString); 
    Console.ReadKey(); 
} 

private static string GenerateCommaSeparateStringFromList(List<string> listStrings) 
{ 
    return String.Join(",", listStrings); 
} 

Convert a list of string to comma separated string C#.

+0

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về cách thức và/hoặc lý do giải quyết vấn đề sẽ cải thiện giá trị lâu dài của câu trả lời. Vui lòng đọc [cách trả lời] này (http://stackoverflow.com/help/how-to-answer) để cung cấp câu trả lời có chất lượng. – thewaywewere

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