//구글콘솔 광고 추가가

코딩 테스트를 풀다가 알게 된 튜플 자료형.

프로그래머스 방문 길이를 풀면서 어떻게 좌표를 저장할지 고민하던 찰나에 리스트에 좌표값 x, y를 저장하고 싶어 구글링 하다가  stackoverflow에서 나와 같은 궁금증을 가진 사람의 질문을 발견했다.

답변을 통해 List<(int, int)> 로 좌표를 저장해 두고 풀었다가 테스트 케이스만 통과되고 틀렸기에 접근 방법을 다시 바꿨다. 간선을 지나왔는지를 체크하는 bool 2차원 배열을 가로, 세로로 나누어서  해결했다.

그래도 이 문제를 통해 새로운 튜플 형식을 찾게 됐기에 기억해 두기 위해 정리해 둔다. 

튜플 형식

튜플 기능 간단한 데이터 구조에서 여러 데이터 요소를 그룹화하는 갈결한 구문 제공.  소괄호로 데이터를 묶음
튜플 형식 값 형식이며 튜플요소는 공용 필드 >> "변경 가능한" 값 형식.    
튜플 구조 (자료형, 자료형) 변수이름 = (자료형 값, 자료형 값);
튜플의 가장 일반적인 사례 메서드 반환형식. out메서드 매개변수를 정의하는 대신 메서드 결과를 튜플 반환형식으로
그룹화 할 수 있음.
(예제 참고 : 
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/value-tuples#tuple-assignment-and-deconstruction)

 

 

선언 방식

튜플 필드의 기본 이름 (int, string) player = (4 , "Nam"); 
// player.Item1 = 4, player.Item2 = "Nam"
튜플 필드의 이름 지정 (int level, string name) player = (4 , "Nam");
// player.level = 4, player.name = "Nam"
튜플 형식의 별칭 지정 using 사용
global using BandPass = (int Min, int Max);
BandPass bracket = (40, 100);
// bracket.Min = 40, bracket.Max = 100

 

 

튜플 할당 및 분해

튜플 형식간에 할당을 위해서는 일단 두 튜플형식의 요소수가 동일해야 되며, 요소의 형식이 동일하거나 암시적 변환 가능해야 됨.

 

할당 (int, double) t1 = (17, 3.14);
(double First, double Second) t2 = (0.0, 1.0);
t2 = t1;
Console.WriteLine($"{nameof(t2)}: {t2.First} and {t2.Second}");
// Output:
// t2: 17 and 3.14

(double A, double B) t3 = (2.0, 3.0);
t3 = t2;
Console.WriteLine($"{nameof(t3)}: {t3.A} and {t3.B}");
// Output:
// t3: 17 and 3.14
튜플 요소값의 튜플 요소의 순서에 따라 할당, 튜플 필드의 이름은 무시되며 할당되지 않는다.
분해 대입연산자를 사용하여 튜플 인스턴스를 개별 변수로 분해 가능. 
var t = ("post office", 3.6);
(string destination, double distance) = t;
Console.WriteLine($"{destination}, {distance}");
// Output:
// post office, 3.6
특정 필드가 필요없다면 _를 입력하여 무시하고 분해 가능.
var t = (name: "Nam" , level: 100);
var (Name , _) = t; // level 무시
Console.WriteLine($"{Name}"};
//Output:
//Nam

 

 

연산자 != , == 지원

튜플 요소 순서에 따라 왼쪽 피연산자의 멤버와 오른쪽 피연산자의 해당 멤버를 비교할 수 있다.

이에 따른 bool값을 사용할 수 있다.

단, 두 튜플의 요소 수가 동일해야 된다.

 

튜플과 System.Tuple 은 다르다!

  지금까지 말한 튜플형식 == System.ValueTuple System.Tuple
형식 값 형식(값 변경 가능) 참조 형식(변경 불가능)
(그럼에도 형식 내의 개별 요소들은 모두 변경 가능한 타입이 될 수 있음.
>>
이런 특성은 마치 readonly필드처럼 변경 가능의 여지를 일부 남겨두고 있다 생각하는 것이 좋음.)
데이터 멤버 필드 속성
참고링크 위의 예제 참고 링크 https://codingcoding.tistory.com/18

 

728x90

'c#' 카테고리의 다른 글

c# 다차원 배열과 가변배열  (0) 2023.12.15
Invoke 와 BeginInvoke의 차이점  (1) 2023.12.14
async 와 await 키워드(비동기 함수)  (0) 2023.04.07
TCP VS UDP  (0) 2023.03.08
객체지향 프로그래밍  (0) 2023.03.08

+ Recent posts