Danh sách các chuỗi thành một chuỗi


206

Hãy nói rằng bạn có một:

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

Trong thế giới chức năng điên rồ này, chúng ta đang sống trong những ngày này, một trong những điều này sẽ là tốt nhất để tạo ra một chuỗi bằng cách nối các chuỗi nà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 thảo luận StringBuilder cũ

Đây có phải là cách tốt hơn không?


9
Có vẻ như .Net 4 cũng sẽ bao gồm một chuỗi.Join (chuỗi, IEnumerable <chuỗi>), cho phép bạn bỏ qua ToArray () msdn.microsoft.com/en-us/l Library / dd783876.aspx
luke

Câu trả lời:


289

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

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

Lý do của tôi là bởi vì phương thức Tham gia đượ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 mã không an toàn đã được sử dụng để thực sự tối ưu hóa nó. Hai cái còn lại cũng LÀM VIỆC, nhưng tôi nghĩ rằng 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 mà không có .ToArray(), nhưng đây là .NET 4+:

String.Join(String.Empty, los);

GA! Tôi thậm chí đã không nhìn thấy tùy chọn này lúc đầu - đọc ngay trước nó.
Joel Coehoorn

2
Nhanh hơn 3 lần so với StringBuilder? Ồ, tôi đoán nó sẽ nhanh hơn, không nhận ra nhanh hơn bao nhiêu. Mặc dù nó có ý nghĩa, 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

8
đẹp! chỉ nhận xét: Tham gia không cần los.ToArray (), vì Danh sách <T> có thể truyền IEnumarable <T>.
Nuri YILMAZ

8
@Nuri: Câu hỏi này đã được hỏi vào ngày 08, trước khi .Net 4 được đưa ra. Quá tải mất IEn Countable <T> đã được thêm vào .Net 4.
BFree

2
String.Join kết hợp với String.Concat là vàng. Ví dụ: 'String.Concat ("{", String.Join (",", m_Data), "}");'
KornMuffin

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

Nếu bạn chỉ muốn nối các chuỗi thì hãy sử dụng chuỗi.Concat () thay vì chuỗi.Join ().


18

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

String.Join<string>(String.Empty, los);

10

String.Join () được triển khai khá nhanh và vì bạn đã có một bộ sưu tập các chuỗi trong câu hỏi, có lẽ là sự lựa chọn tốt nhất. Trên hết, 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.



5

Phiếu bầu của tôi là chuỗi.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.