수색…


튜플 생성하기

튜플은 제네릭 형식 Tuple<T1> - Tuple<T1,T2,T3,T4,T5,T6,T7,T8> 집니다. 각 유형은 1 - 8 개의 요소가 들어있는 튜플을 나타냅니다. 요소는 다른 유형 일 수 있습니다.

// tuple with 4 elements
var tuple = new Tuple<string, int, bool, MyClass>("foo", 123, true, new MyClass());

튜플은 정적 Tuple.Create 메서드를 사용하여 만들 수도 있습니다. 이 경우 요소의 형식은 C # 컴파일러에서 유추됩니다.

// tuple with 4 elements
var tuple = Tuple.Create("foo", 123, true, new MyClass());
7.0

C # 7.0부터, 튜플은 ValueTuple을 사용하여 쉽게 생성 할 수 있습니다.

var tuple = ("foo", 123, true, new MyClass());

더 쉽게 분해 할 수 있도록 요소의 이름을 지정할 수 있습니다.

(int number, bool flag, MyClass instance) tuple = (123, true, new MyClass());

튜플 요소에 액세스하기

튜플 요소에 액세스하려면 Item1 - Item8 속성을 사용하십시오. 인덱스 번호가 튜플 크기보다 작거나 같은 속성 만 사용할 수 있습니다 (즉, Tuple<T1,T2> Item3 속성에 액세스 할 수 없습니다).

var tuple = new Tuple<string, int, bool, MyClass>("foo", 123, true, new MyClass());
var item1 = tuple.Item1; // "foo"
var item2 = tuple.Item2; // 123
var item3 = tuple.Item3; // true
var item4 = tuple.Item4; // new My Class()

튜플 비교 및 ​​정렬

튜플은 요소를 기반으로 비교할 수 있습니다.

예를 들어, 요소가 Tuple 인 열거 형은 지정된 요소에 정의 된 비교 연산자를 기반으로 정렬 할 수 있습니다.

List<Tuple<int, string>> list = new List<Tuple<int, string>>();
list.Add(new Tuple<int, string>(2, "foo"));
list.Add(new Tuple<int, string>(1, "bar"));
list.Add(new Tuple<int, string>(3, "qux"));

list.Sort((a, b) => a.Item2.CompareTo(b.Item2)); //sort based on the string element

foreach (var element in list) {
    Console.WriteLine(element);
}

// Output:
// (1, bar)
// (2, foo)
// (3, qux)

또는 정렬 사용을 되돌리려면 :

list.Sort((a, b) => b.Item2.CompareTo(a.Item2));

메서드에서 여러 값 반환

튜플은 매개 변수를 사용하지 않고 메서드에서 여러 값을 반환하는 데 사용할 수 있습니다. 다음 예제에서 AddMultiply 는 두 개의 값 (sum, product)을 반환하는 데 사용됩니다.

void Write()
{
    var result = AddMultiply(25, 28);
    Console.WriteLine(result.Item1);
    Console.WriteLine(result.Item2);
}

Tuple<int, int> AddMultiply(int a, int b)
{
    return new Tuple<int, int>(a + b, a * b);
}

산출:

53
700

이제 C # 7.0은 값 튜플을 사용하는 메서드에서 여러 값을 반환하는 다른 방법을 제공합니다. ValueTuple 구조체에 대한 추가 정보 .



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow