C#에서 8개 이상의 요소를 가진 튜플(Tuple)을 다룰 때, 나머지 요소들을 확인하려면 Rest 속성을 사용하면 됩니다. C#의 튜플은 최대 7개의 요소만 개별 아이템(Item1~Item7)으로 저장하고, 그 이상의 값들은 중첩된 튜플 형태로 Rest 속성에 담기기 때문입니다.
예제 1: 기본적인 Rest 속성 사용법
아래 예제에서는 두 개의 8요소 튜플을 생성한 뒤, 각 아이템 값과 함께 Rest 속성으로 나머지 값을 출력합니다.
using System;
public class Demo {
public static void Main(String[] args){
var tuple1 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500, 2000);
var tuple2 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500, 2000);
Console.WriteLine("Is Tuple1 equal to Tuple2? = "+tuple1.Equals(tuple2));
Console.WriteLine("HashCode of Tuple1 = "+tuple1.GetHashCode());
Console.WriteLine("HashCode of Tuple2 = "+tuple2.GetHashCode());
Console.WriteLine("Tuple1 Item 1st = "+tuple1.Item1);
Console.WriteLine("Tuple2 Item 1st = "+tuple2.Item1);
Console.WriteLine("Tuple1 Item 2nd = "+tuple1.Item2);
Console.WriteLine("Tuple2 Item 2nd = "+tuple2.Item2);
Console.WriteLine("Tuple1 Item 4th = "+tuple1.Item4);
Console.WriteLine("Tuple2 Item 4th = "+tuple2.Item4);
Console.WriteLine("Tuple1 Item 5th = "+tuple1.Item5);
Console.WriteLine("Tuple2 Item 5th = "+tuple2.Item5);
Console.WriteLine("Tuple1 Item 6th = "+tuple1.Item6);
Console.WriteLine("Tuple2 Item 6th = "+tuple2.Item6);
Console.WriteLine("Tuple1 Item 7th = "+tuple1.Item7);
Console.WriteLine("Tuple2 Item 7th = "+tuple2.Item7);
Console.WriteLine("Tuple1 rest value = "+tuple1.Rest);
Console.WriteLine("Tuple2 rest value = "+tuple2.Rest);
}
}실행 결과
Is Tuple1 equal to Tuple2? = True HashCode of Tuple1 = 3247155 HashCode of Tuple2 = 3247155 Tuple1 Item 1st = 75 Tuple2 Item 1st = 75 Tuple1 Item 2nd = 200 Tuple2 Item 2nd = 200 Tuple1 Item 4th = 700 Tuple2 Item 4th = 700 Tuple1 Item 5th = 100 Tuple2 Item 5th = 100 Tuple1 Item 6th = 1200 Tuple2 Item 6th = 1200 Tuple1 Item 7th = 1500 Tuple2 Item 7th = 1500 Tuple1 rest value = (2000) Tuple2 rest value = (2000)
위 결과를 보면 8번째 값인 2000이 별도의 아이템이 아니라 Rest 속성에 (2000) 형태로 저장된 것을 확인할 수 있습니다.
예제 2: Rest 속성에 중첩 튜플 사용하기
Rest 속성에는 단순 값뿐 아니라 또 다른 튜플을 중첩해서 넣을 수도 있습니다. 다음 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main(String[] args){
var tuple1 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500, Tuple.Create("AB", 2000, "CD"));
var tuple2 = Tuple.Create(75, 200, 500, 700, 100, 1200, 1500, Tuple.Create(2500, 3500, 4000, "XY"));
Console.WriteLine("Is Tuple1 equal to Tuple2? = "+tuple1.Equals(tuple2));
Console.WriteLine("HashCode of Tuple1 = "+tuple1.GetHashCode());
Console.WriteLine("HashCode of Tuple2 = "+tuple2.GetHashCode());
Console.WriteLine("Tuple1 Item 1st = "+tuple1.Item1);
Console.WriteLine("Tuple2 Item 1st = "+tuple2.Item1);
Console.WriteLine("Tuple1 Item 2nd = "+tuple1.Item2);
Console.WriteLine("Tuple2 Item 2nd = "+tuple2.Item2);
Console.WriteLine("Tuple1 Item 4th = "+tuple1.Item4);
Console.WriteLine("Tuple2 Item 4th = "+tuple2.Item4);
Console.WriteLine("Tuple1 Item 5th = "+tuple1.Item5);
Console.WriteLine("Tuple2 Item 5th = "+tuple2.Item5);
Console.WriteLine("Tuple1 Item 6th = "+tuple1.Item6);
Console.WriteLine("Tuple2 Item 6th = "+tuple2.Item6);
Console.WriteLine("Tuple1 Item 7th = "+tuple1.Item7);
Console.WriteLine("Tuple2 Item 7th = "+tuple2.Item7);
Console.WriteLine("Tuple1 rest value = "+tuple1.Rest);
Console.WriteLine("Tuple2 rest value = "+tuple2.Rest);
}
}실행 결과
Is Tuple1 equal to Tuple2? = False HashCode of Tuple1 = -1121878415 HashCode of Tuple2 = -835095725 Tuple1 Item 1st = 75 Tuple2 Item 1st = 75 Tuple1 Item 2nd = 200 Tuple2 Item 2nd = 200 Tuple1 Item 4th = 700 Tuple2 Item 4th = 700 Tuple1 Item 5th = 100 Tuple2 Item 5th = 100 Tuple1 Item 6th = 1200 Tuple2 Item 6th = 1200 Tuple1 Item 7th = 1500 Tuple2 Item 7th = 1500 Tuple1 rest value = ((AB, 2000, CD)) Tuple2 rest value = ((2500, 3500, 4000, XY))
정리
- C# 튜플은 최대 7개의 요소까지
Item1~Item7로 접근할 수 있습니다. - 8번째 요소부터는
Rest속성에 중첩된 튜플 형태로 저장됩니다. Rest에는 값 하나뿐 아니라 여러 요소를 가진 새로운 튜플을 중첩시켜 담을 수 있습니다.- 두 튜플의 구성 요소가 다르면
Equals()비교 결과가False가 되며 해시코드도 달라집니다.