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 과 비교도 가능하다.
익명 타입, 튜플, 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 |