Tuple ใน C# เป็นโครงสร้างข้อมูลที่จัดกลุ่มค่าหลายค่าเข้าด้วยกัน Quadruple หรือ 4-Tuple คือ Tuple ที่มี 4 องค์ประกอบ (<T1, T2, T3, T4>)
การสร้าง Tuple (C# 7.0+ ValueTuple - แนะนำ)
// Tuple Syntax (ValueTuple - Struct, Mutable) var myTuple = (100, 200, 300, 400); // หรือระบุชื่อ Element (Named Tuple) var person = (Id: 1, Name: "John", Age: 30, Active: true); // เข้าถึง Console.WriteLine(person.Name); // "John" Console.WriteLine(person.Age); // 30
Tuple Class (Legacy - Reference Type, Immutable)
using System;
// Tuple.Create Factory Method
var myTuple = Tuple.Create(100, 200, 300, 400);
// เข้าถึงผ่าน Item1, Item2, Item3, Item4
Console.WriteLine($"Item1: {myTuple.Item1}"); // 100
Console.WriteLine($"Item2: {myTuple.Item2}"); // 200
Console.WriteLine($"Item3: {myTuple.Item3}"); // 300
Console.WriteLine($"Item4: {myTuple.Item4}"); // 400
ผลลัพธ์
Item1: 100 Item2: 200 Item3: 300 Item4: 400
ValueTuple vs Tuple Class
| คุณสมบัติ | ValueTuple (Struct) | Tuple Class (Reference) |
|---|---|---|
| Syntax | (a, b, c, d) | Tuple.Create(a,b,c,d) |
| Mutability | Mutable | Immutable |
| Performance | ดีกว่า (No Heap Alloc) | มี Overhead |
| Named Elements | รองรับ (Name: val) | ไม่รองรับ (Item1...) |
| Deconstruction | รองรับ var (a,b,c,d) = t; | ไม่รองรับ |
Deconstruction (แยกค่าออกมา)
var (id, name, age, active) = person; Console.WriteLine(id); // 1 Console.WriteLine(name); // "John" // Discard ด้วย _ var (_, name, _, _) = person; // ต้องการแค่ Name
เมื่อไหร่ใช้ Tuple?
- Return Multiple Values จาก Method
- Group ข้อมูลชั่วคราว ไม่คุ้มค่าสร้าง Class/Record
- LINQ Queries, Pattern Matching