C#에서 튜플은 데이터를 정리하는 자료 구조로, 어떤 타입의 필드든 두 개 이상 담을 수 있어요.
튜플은 보통 쉼표로 구분된 두 개 이상의 식을 괄호 안에 넣어 만들어요.
string boast = "All you need to know";
bool success = !string.IsNullOrWhiteSpace(boast);
(bool, int, string) triple = (success, 42, boast);
튜플은 할당 및 초기화 연산, 반환값, 메서드 인자로 사용할 수 있어요.
필드는 점 표기법을 사용해 추출해요. 기본적으로 첫 번째 필드는 Item1, 두 번째 필드는 Item2 등이에요. 기본값이 아닌 이름은 아래에서 설명해요.
// initialization
(int, int, int) vertices = (90, 45, 45);
// assignment
vertices = (60, 60, 60);
// return value
(bool, int) GetSameOrBigger(int num1, int num2)
{
return (num1 == num2, num1 > num2 ? num1 : num2);
}
// method argument
int Add((int, int) operands)
{
return operands.Item1 + operands.Item2;
}
Item1 같은 필드 이름은 코드를 읽기 쉽게 만들어 주지 않아요. 아래 코드는 튜플의 필드에 이름을 붙이는 두 가지 방법을 보여줘요. 또한 아래 코드에서 var를 튜플과 함께 사용할 수 있고 타입이 추론된다는 점도 눈여겨봐요. 이 방법은 이름이 있는 튜플과 이름이 없는 튜플 모두에 똑같이 잘 작동해요.
// name items in declaration
(bool success, string message) results = (true, "well done!");
bool mySuccess = results.success;
string myMessage = results.message;
// name items in creating expression
var results2 = (success: true, message: "well done!");
bool mySuccess2 = results2.success;
string myMessage2 = results2.message;
이 연습 문제에서는 전화번호를 분석해요.
구현해야 할 기능은 두 가지예요.
루틴에 전달되는 전화번호는 NNN-NNN-NNNN 형식(예: 212-515-9876)이고 null이 아니라고 보장돼요.
분석 결과로 세 가지 데이터를 반환해야 해요.
전화번호 정보를 만들려면 (정적) 메서드 PhoneNumber.Analyze()를 구현해요.
PhoneNumber.Analyze("631-555-1234");
// => (false, true, "1234")
1번 문제에서 만든 전화번호 정보를 사용해 전화번호가 가짜인지 확인하려면 (정적) 메서드 PhoneNumber.IsFake()를 구현해요.
PhoneNumber.IsFake(PhoneNumbers.Analyze("631-555-1234"));
// => true
Exercism에 가입하고 C# 트랙을 개념 62개연습 문제 178개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.