Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 튜플(Tuple)의 나머지 요소를 가져오는 방법 – Rest 속성 활용법

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가 되며 해시코드도 달라집니다.