C # รายการ <string> ถึงสตริงที่มีตัวคั่น


631

มีฟังก์ชั่นใน C # เพื่อแปลงคอลเลกชันบางอย่างให้เป็นสตริงและแยกค่าด้วยตัวคั่นอย่างรวดเร็วหรือไม่?

ตัวอย่างเช่น:

List<string> names -> string names_together = "John, Anna, Monica"

คำตอบ:


1201

String.Joinคุณสามารถใช้ ถ้าคุณมีList<string>แล้วคุณสามารถโทรToArrayครั้งแรก:

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

ใน .NET 4 คุณไม่จำเป็นต้องใช้ToArrayอีกต่อไปเนื่องจากมีการเกินพิกัดของที่ใช้เวลา String.JoinIEnumerable<string>

ผล:


John, Anna, Monica


95

คุณสามารถทำได้ด้วย linq ถ้าคุณต้องการ

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

แม้ว่าฉันจะชอบไวยากรณ์ที่ไม่ใช่ linq ในคำตอบของ Quartermeister และฉันคิดว่าAggregateอาจทำงานได้ช้าลง


19
ขอบคุณสำหรับคำตอบที่รวดเร็วทั้งสองใช้ได้ดี คุณพูดถูกฉันได้ทำการวัดประสิทธิภาพเล็กน้อยโดยใช้คลาส Stopwatch และ linq-way นั้นช้ากว่ามาก: String.Join (",", names.ToArray ()); -> รับ 18 เห็บรวม ((a, b) => a + "," + b) -> รับ 736 เห็บ
น่าน

2
ใช่ฉันคิดว่าAggregateดีกว่าสำหรับการดำเนินการทางคณิตศาสตร์ ด้วยสตริงการดำเนินการนี้จะคล้ายกับfor eachไอเอ็นจีและเพียงแค่ผนวกกับสตริงซึ่งช้าไม่มีประสิทธิภาพมากเพราะคุณกำลังสร้างสตริงใหม่สำหรับแต่ละรายการที่มีอยู่ในรายการ
บ๊อบ

โปรดทราบว่าการรวมโดยไม่มีค่าเมล็ดจะส่ง InvalidOperationException หากคอนเทนเนอร์ว่างเปล่า ใช้เวอร์ชันรวมที่รวม (seed, func) เพื่อหลีกเลี่ยงข้อผิดพลาดในการจัดการรหัสหรือตรวจสอบตามเงื่อนไข String.Join ไม่ได้ว่างเปล่าดังนั้นจึงไม่จำเป็นต้องใส่รหัสหรือรหัสพิเศษ ... บวกกับไม่ต้องใช้ Linq และไวยากรณ์ค่อนข้างชัดเจนกว่า
Huacanacha

1
การรวมในตัวอย่างด้านบนอาจทำงานได้เร็วขึ้นหากคุณใช้ StringBuilder ไม่แนะนำให้ใช้ '+' เพื่อทำการเชื่อมต่อหลายรายการ ดูข้อสังเกตได้ที่นี่ ( msdn.microsoft.com/en-us/library/… )
Ilya Denisov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.