C# Tuple
C# Tuple
๐ซ Tuple
์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ณ ๊ฐ์ ์ด์ฉํ์ฌ ๋จ์ผ์ ๋ณตํฉ ๊ฐ์ ๋ํ๋ด๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ.
๊ฐ๊ฐ์ ๊ฐ์ด ์๋ก ์ฐ๊ด๋์ด ์์์๋ ์๋ก์ด ํ์
์ ์์ฑํ๊ณ ์ถ์ง ์๋ค๋ฉด,
์ถ๊ฐ์ ์ธ ์บก์ํ ์์
์์ด ๊ฐ๋จํ ๋ณตํฉ ๊ตฌ์ฑ์ ์ฌ์ฉํ ์ ์๋ค.
๐ซง
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
(int, int) t = (0, 1);
// t.ToString();
// Output: (0, 1)
// t.GetHashCode();
(double, int) t = (4.5, 3);
// t.Item1, t.Item2
(double Sum, int) t = (4.5, 3);
// t.Sum(=Item1), t.Item2
(double Sum, int Count) t = (4.5, 3);
// t.Sum(=Item1), t.Count(=Item2)
var t = (4.5, 3);
// t.Item1, t.Item2
var t = (Sum: 4.5, 3);
// t.Sum(=Item1), t.Item2
var t = (Sum: 4.5, Count: 3);
// t.Sum(=Item1), t.Count(=Item2)
(double Sum, int Count) t = (Sum: 4.5, Count: 3);
// t.Sum, t.Count
// CS8123 : ํํ ์์ ์ด๋ฆ 'Sum'์(๋) ๋์ ํ์ '(double Sum, int Count)'์์ ๋ค๋ฅธ ์ด๋ฆ์ด ์ง์ ๋์๊ฑฐ๋ ์ด๋ฆ์ด ์ง์ ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฌด์๋ฉ๋๋ค.
var sum = 4.5;
var count = 3;
var t = (sum, count);
Console.WriteLine($"Sum of {t.count} elements is {t.sum}.");
// Tuple Projection Initializer
// Can't Projection : Tuple's Member Name(ToString, Rest, Item1, Item2...), Already Used
var t =
(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26);
// t.Item1 ~ t.Item26
์ปดํ์ผ ์๊ฐ์ ํ๋ ์ด๋ฆ์ ๊ธฐ๋ณธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝ
= ๋ช
์์ ์ง์ , ์ ์ถ๋ ํ๋ ์ด๋ฆ ๋ฐํ์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var xs = new[] { 4, 7, 9 };
var limits = FindMinMax(xs);
Console.WriteLine($"Limits of [{string.Join(" ", xs)}] are {limits.min} and {limits.max}");
// Output:
// Limits of [4 7 9] are 4 and 9
var ys = new[] { -9, 0, 67, 100 };
var (minimum, maximum) = FindMinMax(ys);
Console.WriteLine($"Limits of [{string.Join(" ", ys)}] are {minimum} and {maximum}");
// Output:
// Limits of [-9 0 67 100] are -9 and 100
(int min, int max) FindMinMax(int[] input)
{
if (input is null || input.Length == 0)
{
throw new ArgumentException("Cannot find minimum and maximum of a null or empty array.");
}
var min = int.MaxValue;
var max = int.MinValue;
foreach (var i in input)
{
if (i < min)
{
min = i;
}
if (i > max)
{
max = i;
}
}
return (min, max);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// ํ ๋น ๋ฐ ๋ถํด
// ๋ ํํ ํ์์ ์์ ์๊ฐ ๋์ผํจ
// AND
// ๊ฐ ํํ ์์น์์ ์ค๋ฅธ์ชฝ ํํ ์์์ ํ์์ด ํด๋นํ๋ ์ผ์ชฝ ํํ ์์์ ํ์๊ณผ ๋์ผํ๊ฑฐ๋ ํด๋น ํ์์ผ๋ก ์์์ ์ผ๋ก ๋ณํ ๊ฐ๋ฅํจ
(int, double) t1 = (17, 3.14);
(double First, double Second) t2 = (0.0, 1.0);
t2 = t1;
// t2.First, t2.Second
(double A, double B) t3 = (2.0, 3.0);
t3 = t2;
// t3.A, t3.B
// ํ๋ ์ด๋ฆ์ ๋ฌด์๋๊ณ ํ ๋น๋์ง ์์
// XXX : t3.First, t3.Second
// = ๋์
์ฐ์ฐ์๋ฅผ ์ด์ฉํ ํํ ์ธ์คํด์ค ๊ฐ๋ณ ๋ณ์ ๋ถํด
// ๋ช
์์ ์ ์ธ
var t = ("post office", 3.6);
(string destination, double distance) = t;
(string destination, var distance) = t;
// ๊ดํธ๋ฐ var (ํ์ํ๋ ๋ณ์๋ฅผ ์์์ ์ ์ธ, ์ปดํ์ผ๋ฌ๊ฐ ์ ์ถ)
var t = ("post office", 3.6);
var (destination, distance) = t;
// ๊ธฐ์กด ๋ณ์ ์ฌ์ฉ
var destination = string.Empty;
var distance = 0.0;
var t = ("post office", 3.6);
(destination, distance) = t;
// ํผํฉ
// ์ญ์ (๋ฌด์)
var (_, _, _, a, _, b) = ~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// ํํ ๋น๊ต
Console.WriteLine((Display(1), Display(2)) == (Display(3), Display(4)));
int Display(int s)
{
Console.WriteLine(s);
return s;
}
// Output:
// 1
// 2
// 3
// 4
// False
// == ๋ฐ != ์ฐ์ฐ์๋ ๋จ๋ฝ(short-circuiting) ๋ฐฉ์์ผ๋ก ํํ์ ๋น๊ตํฉ๋๋ค. ์ฆ, ๊ฐ์ง ์์ ์์ ์์ ์ถฉ์กฑํ๊ฑฐ๋ ํํ์ ๋์ ๋๋ฌํ๋ ์ฆ์ ์ฐ์ฐ์ด ์ค์ง๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ ์์ ์ ๊ฐ์ด ๋น๊ตํ๊ธฐ ์ ์ โ๋ชจ๋ โ ํํ ์์๊ฐ ํ๊ฐ๋ฉ๋๋ค.
1
2
3
4
5
6
7
8
// Deconstruct
var p = new Person("John", "Quincy", "Adams", "Boston", "MA");
// Deconstruct the person object.
var (fName, lName, city, state) = p;
var (temp, _, _) = p;
๐ซ ๋ฉ๋ชจ
์ด ๊ธฐ์ฌ๋ ์ ์๊ถ์์ CC BY 4.0 ๋ผ์ด์ผ์ค๋ฅผ ๋ฐ๋ฆ
๋๋ค.