๋ฐฐ์ด์ ๋ง์ง๋ง ์ธ๋ฑ์ค
ํญ์ ๋ฐฐ์ด์ ๋ง์ง๋ง ์ธ๋ฑ์ค์ ์ ๊ทผํ ๋ ๋ฐฐ์ด.Length-1๋ก ์ ๊ทผํ์๋๋ฐ, C# 8.0๋ถํฐ๋ ์ด๋ฐ ๋ถํธํจ์ ์์ค ^์ฐ์ฐ์๊ฐ ๋ฑ์ฅํ์๋ค.
^n์ ๋ค์์ n๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๋งํ๋ค.
using System;
namespace ArraySample
{
class MainApp
{
static void Main(string[] args)
{
int[] arr = { 1, 2, 3, 4, 5 };
Console.WriteLine(arr[^1]); // 5
Console.WriteLine(arr[^2]); // 4
Console.WriteLine(arr[^3]); // 3
}
}
}
๋ฐฐ์ด์ ์ ๋ ฌ๊ณผ ์ถ๋ ฅ
int[] scores = new int[] { 90, 70, 50, 100, 40, 80 };
int[,] scores2 = new int[,] { { 90, 70 }, { 50, 80 }, { 100, 40 } };
// 1. Sort() : ๋ฐฐ์ด ์ ๋ ฌ
Array.Sort( scores );
// ์ถ๋ ฅ 1
Console.WriteLine(string.Join(", ", scores)); // 40, 50, 70, 80, 90, 100
// ์ถ๋ ฅ 2
Array.ForEach( scores, x => Console.WriteLine(x)); // 40 50 70 80 90 100
๋ฐฐ์ด์ ์ฐจ์์ ์์ ๊ธธ์ด
Rank๋ ํ์ฌ ๋ฐฐ์ด์ด ๋ช ์ฐจ์ ๋ฐฐ์ด์ธ์ง ์๋ ค์ฃผ๊ณ , GetLength()๋ ํ์ฌ ๋ฐฐ์ด์ ์ฐจ์์ ๊ธธ์ด๊ฐ ๋ช์ธ์ง๋ฅผ ์๋ ค์ค๋ค๋ ์ ์์ ์ฐจ์ด๊ฐ ์๋ค.
int[] scores = new int[] { 90, 70, 50, 100, 40, 80 };
int[,] scores2 = new int[,] { { 90, 70 }, { 50, 80 }, { 100, 40 } };
// 2. Rank์ GetLength() : ์ฐจ์์ ์์ ๊ธธ์ด
Console.WriteLine(scores.Rank); // ์ผ์ฐจ์ ๋ฐฐ์ด => 1
Console.WriteLine(scores2.Rank); // ์ด์ฐจ์ ๋ฐฐ์ด => 2
Console.WriteLine(scores.GetLength(0)); // ๋ฐฐ์ด์ 0๋ฒ์งธ ์ฐจ์(1)์ ๊ธธ์ด => 6
Console.WriteLine(scores2.GetLength(0)); // ๋ฐฐ์ด์ 0๋ฒ์งธ ์ฐจ์(1)์ ๊ธธ์ด => 3
Console.WriteLine(scores2.GetLength(1)); // ๋ฐฐ์ด์ 1๋ฒ์งธ ์ฐจ์(2)์ ๊ธธ์ด => 2
๋ฐฐ์ด์ ์ธ๋ฑ์ค ํ์
์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด์ด๋ผ๋ฉด, ์ด์งํ์์ ํตํด ์ํ๋ ๊ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ๋ ๊ฒ์ด ์ ์ผ ๋น ๋ฅด๋ค. (์๊ฐ ๋ณต์ก๋ O(log n)) ํ์ง๋ง, ์ด์ง ํ์์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ด ์ ๋ ฌ๋์ง ์์๋ค๋ฉด ์ด์ํ ๊ฐ์ด ๋์ฌ ์๋ ์๋ค.
// 3. Binary Search<T>() : ์ด์ง ํ์
Console.WriteLine(Array.BinarySearch<int>(scores, 80)); // ์ ๋ ฌ๋ ๋ฐฐ์ด์์๋ ์ ํ์ธ ์ธ๋ฑ์ค ๊ฐ ๋ฐํ => 3
int[] newScores = new int[] { 90, 70, 50, 100, 40, 80 };
Console.WriteLine(Array.BinarySearch<int>(newScores, 90)); // ์ ๋ ฌ๋์ง ์์ ๋ฐฐ์ด์์๋ ์์์น ๋ชปํ ๊ฐ์ด ๋์ฌ ์ ์์ => -7
์ ๋ ฌ์ด ๋์ง ์์ ๋ฐฐ์ด์ด๋ผ๋ฉด ์ ํ ํ์์ ์งํํ๋ IndexOf()๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. (์๊ฐ ๋ณต์ก๋ O(n))
// 4. IndexOf() : ์ ํ ํ์
Console.WriteLine(Array.IndexOf(newScores, 90)); // ์ ๋ ฌ์ด ๋์ง ์์ ๋ฐฐ์ด์์๋ IndexOf๋ฅผ ์ฌ์ฉํด์ผ ํจ => 0
๋ง์ฝ ์์์ ์ ํํ ๊ฐ์ด ์๋๋ผ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์์ ์ธ๋ฑ์ค ๊ฐ์ ์๊ณ ์ถ๋ค๋ฉด, FindIndex<T>()๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ๋ฉ์๋๋ ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ฒซ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค๋ง ๋ฐํํ๋ค.
// 5. FindIndex<T>() : ์กฐ๊ฑด ํ์
Console.WriteLine(Array.FindIndex<int>(newScores, score => score<60)); // ์กฐ๊ฑด์ ๋ถํฉํ๋ ์ฒซ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค ๋ฐํ => 2
๋ฐฐ์ด์ ๋ชจ๋ ์์๊ฐ ์กฐ๊ฑด์ ๋ง๋์ง ํ์
๋ฐฐ์ด์ ๋ชจ๋ ์์์ ๋ํด์ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธํ๊ณ ์ถ๋ค๋ฉด, TrueForAll<T>() ๋ฉ์๋๋ฅผ ํ์ฉํ๋ฉด ๋๋ค. ์ด ๋ฉ์๋๋ True/False๋ฅผ ๋ฐํํ๋ค.
// 6. TrueForAll<T>() : ๋ฐฐ์ด์ ๋ชจ๋ ์์๊ฐ ์กฐ๊ฑด์ ๋ง๋์ง ํ์
Console.WriteLine(Array.TrueForAll<int>(scores, CheckPassed)); // boolean ๋ฐํ => False
๋ฐฐ์ด์ ํฌ๊ธฐ ์ฌ์กฐ์
๋ฐฐ์ด์ ์๋ ํ ๋ฒ ์์ฑ๋๋ฉด ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ด ๋ง๋ค. ํ์ง๋ง Array.Resize<T>(ref T[] array, int newSize) ๋ฉ์๋๋ ์ฃผ์ด์ง ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ newSize๋ก ๋ณ๊ฒฝํ๋ค.
์ฌ์ค ์ด ๋ฉ์๋๋ ์ฃผ์ด์ง ๊ธธ์ด์ ๋ฐฐ์ด์ ์๋ก ๋ง๋ค๊ณ , ์๋ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐฐ์ด๋ก ๋ณต์ฌํ ํ, ๊ธฐ์กด ๋ฐฐ์ด์ ์ฐธ์กฐ๋ฅผ ์๋ก์ด ๋ฐฐ์ด์ ์ฐธ์กฐ๋ก ๊ฐฑ์ ํด์ ๋ง์น ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๋ฐ๋ ๊ฒ ๊ฐ์ด ๋ณด์ด๋ ๊ฒ์ด๋ค. ์ฐธ์กฐ๋ฅผ ๊ฐฑ์ ํด์ค์ผํ๊ธฐ ๋๋ฌธ์ ref๋ฅผ ๊ผญ ์ ์ด์ผ ํ๋ค. (์ ์ง ์์ผ๋ฉด ์๋ฌด๋ฐ ๋์๋ ์ผ์ด๋์ง ์๋๋ค.)
// 7. Resize<T>() : ๋ฐฐ์ด์ ํฌ๊ธฐ ์ฌ์กฐ์
Array.Resize<int>(ref scores, scores.Length + 2);
Console.WriteLine(scores.Length); // ๊ธฐ์กด ๋ฐฐ์ด์ ๊ธธ์ด 6์์ 2 ๋์ด๋จ => 8
Array.ForEach( scores, x => Console.Write($"{x}, ")); // ๊ธฐ์กด ๋ฐฐ์ด์์ ๋์ด๋ ๊ณต๊ฐ์๋ 0์ด ์ฑ์์ง => 40, 50, 70, 80, 90, 100, 0, 0,
Console.WriteLine();
๋ฐฐ์ด ์ด๊ธฐํ
๋ชจ๋ ์์๋ฅผ ์ด๊ธฐํํ๊ณ ์ถ๋ค๋ฉด Clear() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ซ์ ๋ฐฐ์ด์ด๋ฉด 0์ผ๋ก ์ด๊ธฐํํ๊ณ , ๋ ผ๋ฆฌ ๋ฐฐ์ด์ด๋ฉด False, ์ฐธ์กฐ ๋ฐฐ์ด์ด๋ฉด null๋ก ์ด๊ธฐํํ๋ค.
// 8. Clear() : ๋ฐฐ์ด ์ด๊ธฐํ
Array.Clear(scores);
Array.ForEach(scores, x => Console.Write($"{x} ")); // ์ซ์ ๋ฐฐ์ด์ด๋ฏ๋ก 0์ผ๋ก ์ด๊ธฐํ => 0 0 0 0 0 0 0 0 (๋
ผ๋ฆฌ๋ฉด False, ์ฐธ์กฐ๋ฉด null๋ก ์ด๊ธฐํ)
Console.WriteLine() ;
๋ฐฐ์ด ๋ณต์ฌ
๋ฐฐ์ด์ ๋ณต์ฌํ๊ณ ์ถ๋ค๋ฉด, Copy() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Array.Copy(๋ณต์ฌํ ๋ฐฐ์ด, ๋ช ๋ฒ์งธ ์ธ๋ฑ์ค๋ถํฐ ๋ณต์ฌํ ๊ฑด์ง, ๋ถ์ฌ๋ฃ์ ๋ฐฐ์ด, ๋ช๋ฒ์งธ๋ถํฐ, ๋ช๋ฒ์งธ ์ธ๋ฑ์ค๊น์ง ๋ถ์ฌ๋ฃ์๊ฑด์ง) ์์๋ก ์ฑ์๋ฃ์ผ๋ฉด ๋๋ค.
// 9. Copy() : ๋ฐฐ์ด ๋ณต์ฌ
Array.Copy(newScores, 0, scores, 1, 5); // newScores ๋ฐฐ์ด์ ์ธ๋ฑ์ค 0๋ฒ๋ถํฐ๋ฅผ scores ๋ฐฐ์ด์ ์ธ๋ฑ์ค 1~5๋ฒ๊น์ง ๋ณต์ฌํด๋ฃ์
Console.WriteLine(string.Join(", ", scores)); // 0, 90, 70, 50, 100, 40, 0, 0
๋ฐฐ์ด ์๋ฅด๊ธฐ
๋ฐฐ์ด์ ์ผ์ ๋ถ๋ถ๋ง ์๋ฅด๊ณ ์ถ์๋๋ .. ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ํธ๋ฆฌํ๊ฒ ์๋ฅผ ์ ์๋ค.
// 10. i..k : i๋ถํฐ k-1๊น์ง ๋ฐฐ์ด ์๋ฅด๊ธฐ
int[] sliced1 = scores[3..]; // 3 ~ ๋ง์ง๋ง ์ธ๋ฑ์ค
Console.WriteLine(string.Join(", ", sliced1)); // 50, 100, 40, 0, 0
int[] sliced2 = scores[..4]; // ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค ~ 4
Console.WriteLine(string.Join(", ", sliced2)); // 0, 90, 70, 50
int[] sliced3 = scores[1..5]; // 1 ~ 5
Console.WriteLine(string.Join(", ", sliced3)); // 90, 70, 50, 100
'๐ฅ๏ธ > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] Collection (0) | 2023.08.21 |
---|---|
[C#] ์ด์ฐจ์ ๋ฐฐ์ด๊ณผ ๊ฐ๋ณ ๋ฐฐ์ด (0) | 2023.08.21 |
[์ด๊ฒ์ด C#์ด๋ค] Chapter09: ์ฐ์ต๋ฌธ์ (0) | 2023.08.20 |
[C#] ๋ ์ฝ๋์ ํ๋กํผํฐ (0) | 2023.08.18 |
[C#] ํ๋กํผํฐ (0) | 2023.08.18 |