2008-11-25 46 views
171

phép nói rằng bạn có một:Danh sách chuỗi một chuỗi

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

Trong thế giới năng điên này chúng ta đang sống trong những ngày này mà một trong những sẽ là tốt nhất cho việc tạo ra một chuỗi bằng cách kết hợp sau đây:

String.Join(String.Empty, los.ToArray()); 

StringBuilder builder = new StringBuilder(); 
los.ForEach(s => builder.Append(s)); 

string disp = los.Aggregate<string>((a, b) => a + b); 

hoặc Đồng bằng cũ ChuỗiBuilder foreach

HOẶC có cách nào tốt hơn không?

+7

Hình như Net 4 cũng sẽ bao gồm một string.Join (string, IEnumerable ), cho phép bạn bỏ qua ToArray() http://msdn.microsoft.com/en-us/library/dd783876.aspx – luke

Trả lời

233

tôi sẽ đi với tùy chọn A:

String.Join(String.Empty, los.ToArray()); 

lập luận của tôi là vì Tham gia phương pháp được viết cho mục đích đó. Trong thực tế, nếu bạn nhìn vào Reflector, bạn sẽ thấy rằng mã không an toàn được sử dụng để thực sự tối ưu hóa nó. Hai người kia cũng LÀM VIỆC, nhưng tôi nghĩ chức năng Tham gia được viết cho mục đích này, và tôi đoán là hiệu quả nhất. Tôi có thể sai mặc dù ...

Theo @Nuri Yilmaz không .ToArray(), nhưng đây là .NET 4+:

String.Join(String.Empty, los); 
+0

GA! Tôi thậm chí không thấy tùy chọn này lúc đầu đọc ngay qua nó. –

+0

Tôi đã làm một số xét nghiệm và họ đã cho thấy rằng điều này nhanh hơn gấp ba lần so với StringBuilder, nhưng cả hai đều tốt hơn nhiều so với tổng hợp –

+1

nhanh hơn 3 lần so với StringBuilder? Wow, tôi đoán nó sẽ nhanh hơn, không nhận ra nhanh hơn bao nhiêu. Nó có ý nghĩa mặc dù, nó được thực hiện trong mã không an toàn bằng cách sử dụng con trỏ, vì vậy ..... có ý nghĩa. – BFree

4

Phiếu bầu của tôi là string.Join

Không cần đánh giá lambda và các chức năng tạm thời được tạo, các cuộc gọi hàm ít hơn, ít ngăn xếp đẩy và popping.

7

String.Join() được triển khai khá nhanh và khi bạn đã có bộ sưu tập các chuỗi đang được đề cập, có lẽ là lựa chọn tốt nhất. Trên tất cả, nó hét lên "Tôi đang tham gia một danh sách các chuỗi!" Luôn luôn tốt đẹp.

45
string.Concat(los.ToArray()); 

Nếu bạn chỉ muốn nối các chuỗi sau đó sử dụng string.Concat() thay vì chuỗi.Join().

15

Nếu bạn sử dụng .net 4.0 bạn có thể sử dụng một cách sorter:

String.Join<string>(String.Empty, los); 
5
los.Aggregate((current, next) => current + "," + next); 
Các vấn đề liên quan