튜플

Fruit·2023년 3월 29일

✨ Hello C#!

목록 보기
32/34
post-thumbnail

🌸 명명되지 않은 튜플

  • 값을 Item1, Item2 ... 필드에 차례로 담는다.

var 변수 이름 = ( 값1, 값2...)



🌸 명명된 튜플: 필드명:

var 변수 이름 = ( 필드명1: 값1, 필드명2: 값2 ...)

😉 명명되지 않은 튜플과 명명된 튜플은 필드의 수와 형식이 같으면 할당이 가능하다.



🌸 분해

  • _: 특정 필드 무시

var 변수 이름 = ( 필드명1: 값1, 필드명2: 값2 ...)

( 필드명1, 필드명2 ...) = 변수 이름
( 필드명1, _ ...) = 변수 이름
( 필드명1, 필드명2 ...) = (값1, 값2 ...)


using System;

namespace Tuple
{
    class MainApp
    {
        static void Main(string[] args)
        {
            var a = ("Fruit", 31);                                   // 명명되지 않은 튜플
            Console.WriteLine($"{a.Item1}, {a.Item2}");

            var b = (Name: "Jack", Age: 18);                     	 // 명명된 튜플
            Console.WriteLine($"{b.Name}, {b.Age}");

            var (name, age) = b;                                     // 분해 1
            Console.WriteLine($"{name}, {age}");

            var (name2, age2) = ("Jill", 21);                        // 분해 2
            Console.WriteLine($"{name2}, {age2}");

            b = a;													// 명명되지 않은 튜플 = 명명된 튜플
            Console.WriteLine($"{b.Name}, {b.Age}");
        }
    }
}

[실행 결과]
Fruit, 31
Jack, 18
Jack, 18
Jill, 21
Fruit, 31



🌸 패턴 매칭

  • 분해된 요소의 위치에 따라 값이 일치하는지 판단한다.
using System;

namespace PosisionalPattern
{
    class MainApp
    {
        private static double GetDiscounRate(object client)
        {
            return client switch
            {
                ("학생", int n) when n < 18 => 0.2,
                ("학생", _) => 0.1,
                ("일반", int n) when n < 18 => 0.1,
                ("일반", _) => 0.05,
                _ => 0,
            };
        }

        static void Main(string[] args)
        {
            var alice = (job: "학생", age: 17);
            var bob = (job: "학생", age: 23);
            var charlie = (job: "일반", age: 15);
            var dave = (job: "일반", age: 21);

            Console.WriteLine($"alice: {GetDiscounRate(alice)}");
            Console.WriteLine($"bob: {GetDiscounRate(bob)}");
            Console.WriteLine($"charlie: {GetDiscounRate(charlie)}");
            Console.WriteLine($"dave: {GetDiscounRate(dave)}");
        }
    }
}

[실행 결과]
alice: 0.2
bob: 0.1
charlie: 0.1
dave: 0.05

▪ 참고: Hello Fruit! - switch

profile
🌼인생 참 🌻꽃🌻 같다🌼

0개의 댓글