Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การต่อลิสต์หลายลิสต์ใน C# ด้วย Concat()

การต่อลิสต์สามลิสต์ขึ้นไปใน 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 ChainingO(k) layersต่ำ (Streaming)2-5 ลิสต์
SelectManyO(1) layerต่ำ (Streaming)หลายลิสต์/ไม่ทราบจำนวน
List.AddRangeO(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() ต่อท้าย