การต่อลิสต์สามลิสต์ขึ้นไปใน C# ทำได้ง่ายด้วย Enumerable.Concat() แบบ Chaining หรือ SelectMany()
วิธีที่ 1: Chaining Concat()
using System;
using System.Collections.Generic;
using System.Linq;
public class Demo
{
public static void Main()
{
var list1 = new List { 3, 4 };
var list2 = new List { 1, 2, 3 };
var list3 = new List { 2, 5, 6 };
var result = list1.Concat(list2).Concat(list3);
foreach (int n in result)
Console.WriteLine(n);
}
}
ผลลัพธ์
3
4
1
2
3
2
5
6
วิธีที่ 2: SelectMany (แนะนำสำหรับลิสต์เยอะ)
var lists = new List> { list1, list2, list3 };
var result = lists.SelectMany(x => x);
วิธีที่ 3: Concat Array
var allLists = new[] { list1, list2, list3 };
var result = allLists.SelectMany(x => x);
เปรียบเทียบประสิทธิภาพ
| วิธี | ความซับซ้อน | หน่วยความจำ | เหมาะสำหรับ |
|---|---|---|---|
| Concat Chaining | O(k) layers | ต่ำ (Streaming) | 2-5 ลิสต์ |
| SelectMany | O(1) layer | ต่ำ (Streaming) | หลายลิสต์/ไม่ทราบจำนวน |
| List.AddRange | O(N) ทั้งหมด | สูง (Allocate ใหม่) | ต้องการ List จริง |
การ Materialize ผลลัพธ์
// เมื่อต้องใช้ผลลัพธ์หลายครั้ง
var resultList = list1.Concat(list2).Concat(list3).ToList();
var resultArray = list1.Concat(list2).Concat(list3).ToArray();
กรณีใช้งานจริง
- รวม Log จากหลายไฟล์/แหล่ง
- สร้างข้อมูลทดสอบจากหลายชุด
- ETL Pipeline: Extract จากหลาย Source แล้ว Concat
- Report Generation: Header + Data Rows + Footer
หมายเหตุ
Concat() ไม่ตัดค่าซ้ำ หากต้องการค่าที่ไม่ซ้ำ ให้ใช้ .Distinct() หรือ Union() ต่อท้าย