C# - tuple) 복습을 위해 작성하는 글 2023-04-19

rizz·2023년 4월 19일
0

C

목록 보기
4/25

📒 갈무리 - tuple

📌 tuple

- 튜플은 간단한 데이터 구조에서 여러 데이터 요소를 그룹화하는 기능

- 두 개 이상의 타입을 그룹화해서 사용할 때 클래스나 구조체를 정의하지않고 곧바로 사용할 수 있다.

 

📌 클래스 튜플 타입

            // 클래스 튜플 타입
            Tuple<int, float> tuple1 = new Tuple<int, float>(1, 1.5f);
            // 8개까지 사용 가능
            Tuple<int, float, int, int, int, int, int, int> tuple2 = 
                new Tuple<int, float, int, int, int, int, int, int>(10, 2.5f, 10, 10, 10, 10, 10, 10);

- 클래스 타입이므로 전달할 때 복사를 하지 않고, 참조값을 전달한다.

- 내부 값들은 프로퍼티로 존재한다.

 

📌 구조체 튜플 타입

            // 구조체 튜플 타입
            // 마찬가지로 8개까지 사용 가능
            ValueTuple<int, float> tuple1 = (3, 2.5f);
            (int, float, string) tuple2 = (2, 1.5f, "def"); // 같은 구조체 튜플

            // 타입을 명시하지 않고 사용
            var t3 = (3, 2.5f, "ghi");

- 구조체 타입이므로 전달할 때 복사되어 전달된다.

- 내부 값들은 필드로 존재한다.

 

📌 튜플 접근

// C#
			var t = (num1: 3, num2: 2.5f, word: "ghi");

            // 접근 방식
            Console.WriteLine($"t : {t}");
            Console.WriteLine($"t : {t.Item1}, {t.Item2}, {t.Item3}"); // 요소로 접근
            Console.WriteLine($"t1 : {t.ToString()}"); // ToString()메서드로 접근
            Console.WriteLine($"t2 : {t.num1}, {t.num2}, {t.word}"); // 이름으로 접근

Output:
t : (3, 2.5, ghi)
t : 3, 2.5, ghi
t1 : (3, 2.5, ghi)
t2 : 3, 2.5, ghi

 

📌 튜플 할당 및 분해

튜플 할당 조건

- 두 튜플의 요소 수가 동일함

- 오른쪽 튜플 요소의 형식이 해당하는 왼쪽 튜플 요소의 형식과 동일하거나 해당 형식으로 암시적 변환이 가능함

// C#

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

// 튜플 분해
var t = ("post office", 3.6);
(string destination, double distance) = t;
Console.WriteLine($"Distance to {destination} is {distance} kilometers.");
// Output:
// Distance to post office is 3.6 kilometers.

// 컴파일러가 해당 형식을 유추하여 분해
var t = ("post office", 3.6);
var (destination, distance) = t;
Console.WriteLine($"Distance to {destination} is {distance} kilometers.");
// Output:
// Distance to post office is 3.6 kilometers.

// 기존 변수를 사용하여 분해
var destination = string.Empty;
var distance = 0.0;

var t = ("post office", 3.6);
(destination, distance) = t;
Console.WriteLine($"Distance to {destination} is {distance} kilometers.");
// Output:
// Distance to post office is 3.6 kilometers.

 

📌 튜플 같음

// C#

// == 및 =!= 연산에는 변수형식이 고려되지 않음
(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

다음 조건이 충족되면 두 튜플 비교가 가능

- 두 튜플의 요소 수가 동일

- 각 튜플 위치에서 왼쪽 및 오른쪽 튜플 피연산자의 해당 요소는 == 및 != 연산자와 비교할 수 있다. 예를 들어 1은 (1, 2)와 비교할 수 없기 때문에 (1, (2, 3)) == ((1, 2), 3)은 컴파일되지 않는다.

 

이 글은 https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/value-tuples 를 참고하여 작성하였습니다.

profile
복습하기 위해 쓰는 글

0개의 댓글