รายการของสตริงหนึ่งสตริง


206

ให้บอกว่าคุณมี:

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

ในโลกแห่งการทำงานที่บ้าคลั่งนี้เราอาศัยอยู่ในยุคนี้ซึ่งหนึ่งในนั้นจะดีที่สุดสำหรับการสร้างสตริงหนึ่งโดยเชื่อมต่อสิ่งเหล่านี้:

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);

หรือ StringBuilder เก่าแบบธรรมดา foreach

หรือมีวิธีที่ดีกว่า


9
ดูเหมือนสุทธิ 4 ยังจะรวมถึง String.Join (สตริง IEnumerable <สตริง>) ให้คุณข้าม toArray () msdn.microsoft.com/en-us/library/dd783876.aspx
ลุค

คำตอบ:


289

ฉันจะไปกับตัวเลือก A:

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

เหตุผลของฉันก็เพราะเขียนวิธีการเข้าร่วมเพื่อจุดประสงค์นั้น ในความเป็นจริงถ้าคุณดูที่ Reflector คุณจะเห็นว่ามีการใช้รหัสที่ไม่ปลอดภัยในการปรับให้เหมาะสม อีกสองคนยังทำงานได้ แต่ฉันคิดว่าฟังก์ชั่นเข้าร่วมถูกเขียนขึ้นเพื่อจุดประสงค์นี้และฉันเดาว่ามีประสิทธิภาพมากที่สุด ฉันอาจจะผิด แต่ ...

ตาม @Nuri YILMAZ โดยไม่ต้อง.ToArray()แต่นี่คือ. NET 4+:

String.Join(String.Empty, los);

GA! ฉันไม่ได้เห็นตัวเลือกนี้ตั้งแต่แรกอ่านเลย
Joel Coehoorn

2
เร็วกว่า StringBuilder 3 เท่า? ว้าวฉันคิดว่ามันจะเร็วขึ้นไม่รู้ตัวเร็วแค่ไหน มันสมเหตุสมผลแล้วมันทำในโค้ดที่ไม่ปลอดภัยโดยใช้พอยน์เตอร์ดังนั้น ..... จึงสมเหตุสมผล
ฟรี

8
ดี! ข้อสังเกตเท่านั้น: การเข้าร่วมไม่จำเป็นต้อง los.ToArray () เนื่องจากรายการ <T> สามารถส่ง IEnumarable <T>
นูริ YILMAZ

8
@Nuri: คำถามนี้ถูกถามใน 08 ก่อน. Net 4 ออก มีการเพิ่มเกินพิกัดที่ใช้ IEnumerable <T> ใน. Net 4
BFree

2
String เข้าร่วมกับ String.Concat เป็นสีทอง ตัวอย่าง: 'String.Concat ("{", String.Join (",", m_Data), "}");'
KornMuffin

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

หากคุณเพียงต้องการเชื่อมสตริงให้ใช้ string.Concat () แทน string.Join ()


18

หากคุณใช้. net 4.0 คุณสามารถใช้วิธีเรียงลำดับ:

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

10

String.Join () มีการใช้งานค่อนข้างเร็วและเมื่อคุณมีชุดของสตริงที่เป็นปัญหาอยู่แล้วอาจเป็นตัวเลือกที่ดีที่สุด เหนือสิ่งอื่นใดมันตะโกนว่า "ฉันกำลังเข้าร่วมรายการสตริง!" ดีเสมอ



5

คะแนนของฉันคือสตริงเข้าร่วม

ไม่จำเป็นต้องสร้างการประเมินแลมบ์ดาและฟังก์ชั่นชั่วคราว, การเรียกใช้ฟังก์ชันน้อยลง, การกดสแต็กน้อยลงและการ popping น้อยลง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.