반응형

c# 튜플 : 간단한 데이터 구조로 여러 데이터 요소를 그룹화 할수있다.

 

튜플 변수 선언

(원하는 자료형 , 원하는 자료형 , ... ) 변수명;

// 선언과 동시에 초기화
(double,int) t = ( 1.1 , 3 );
 t.Item1 = 10;

(string name , int age) t2;
t2 = (name: "Mok", age: 5);
t2.age = 20;

이런식으로 간단하게 그룹화 할수있다

또한 튜플은 함수의 반환형식 에서도 사용할수 있다.

 

 

튜플 함수 사용

(원하는 자료형 , 원하는 자료형 , ... ) 함수명 (매개변수s..) { 내부구현...  retrun(반환값,...) };

  
   (int min, int max) FindMinMax(int[] input)
        {
         //... 내부구현
            return (min, max);
        }

위 함수처럼 자료형 클래스 말고도 묶어서 사용이 가능하다.

 

 

c# 에서 제공한 튜플의 사용 사례를 보면 더욱 쉽게 알수있다.

       //마소 c# 튜플 사용 사례
       var ys = new[] { -9, 0, 67, 100 };
        var (minimum, maximum) = FindMinMax(ys);
        // Output:
        // Limits of [-9 0 67 100] are -9 and 100

        (int min, int max) FindMinMax(int[] input)
        {
            if (input is null || input.Length == 0)
            {
            }

            var min = int.MaxValue;
            var max = int.MinValue;
            foreach (var i in input)
            {
                if (i < min)
                {
                    min = i;
                }
                if (i > max)
                {
                    max = i;
                }
            }
            return (min, max);
        }

위 사용 사례에서 보이는것 처럼 minimum 과 maximum 을 따로 구하지 않고 한번의 묶음으로 처리하여

하나의 함수로 처리하는것을 볼수있다.

 

 

또다른 사용 예시로는 비교문에서 알수있다.

//튜플 비교문


(int a, byte b) left = (5, 10);
(long a, int b) right = (5, 10);
Console.WriteLine(left == right);  // output: True
Console.WriteLine(left != right);  // output: False

var t1 = (A: 5, B: 10);
var t2 = (B: 5, A: 10);
Console.WriteLine(t1 == t2);  // output: True
Console.WriteLine(t1 != t2);  // output: False

보이는것 처럼 두개의 묶음으로 비교하여 비교문을 줄일수 있다.

 

 

튜플은  Dictionary 에서도 사용이 가능하다.

var limitsLookup = new Dictionary<int, (int Min, int Max)>()
{
    [2] = (4, 10),
    [4] = (10, 20),
    [6] = (0, 23)
};

if (limitsLookup.TryGetValue(4, out (int Min, int Max) limits))
{
    Console.WriteLine($"Found limits: min is {limits.Min}, max is {limits.Max}");
}
// Output:
// Found limits: min is 10, max is 20

이처럼 쉽게 저장하고 사용하는것을 볼수있다.

 

 

참고

 1. 지금 사용한 튜플 형식사용은 기존 Tuple class 와는 다르다.

    ㄴ 지금 사용한 형식은 System.ValueTuple 이고 Tuple class는 System.Tuple 이다.

 2.  System.ValueTuple 형식은 데이터 멤버는 필드이다.

 2.1  System.Tuple 형식은 데이터 멤버는 속성이다.

 

3. anonymous type 과 비교도 가능하다.

var apple = new { Item = "apples", Price = 1.35 };
(string,double) appe = ( "apples", 1.35 );

if(appe == appe)
{
Console.WriteLine("true"); //true
}

 

 

익명 타입, 튜플, vlaueTuple 들의 주요 차이점은 다음과 같다

이름 액세스 한정자 형식 사용자 지정 멤버 이름 분해 지원 식트리 지원
anonymous type internal o x o
Tuple public x x o
ValueTuple public o o x

 

참고자료 : docs.microsoft.com

'언어 > C#' 카테고리의 다른 글

c# ?? 연산자 (Null 병합 연산자)  (0) 2022.07.12
c# Nullable값 형식  (0) 2022.03.24
C# Ref,Out 키워드 와 in 키워드  (0) 2022.03.16

+ Recent posts