๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/C#

[C#] ๋ฐฐ์—ด ๋‹ค๋ฃจ๊ธฐ

by HanaV 2023. 8. 21.
728x90

๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค

ํ•ญ์ƒ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•  ๋•Œ ๋ฐฐ์—ด.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

 

728x90

"); wcs_do();