
이전에 3일차에서 게임을 만들며 배열을 가볍게 다룬적이 있었다.
이번엔 배열을 다시 한번 다루고, 추가로 리스트에 대해 알아볼 것이다.
1. 배열(Array)
public static void Main(string[] args)
{
int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
string[] words = { "Apple", "Bee", "Cat", "Dog" };
Console.Write("nums = ");
for (int i = 0; i < nums.Length; i++)
{
Console.Write(nums[i] + " ");
}
Console.WriteLine();
Console.Write("words = ");
for (int i = 0; i < words.Length; i++)
{
Console.Write(words[i] + " ");
}
}

배열은 변수들을 저장할 수 있는 자료구조이다.
처음에 배열한 자료형만 배열에 저장할 수 있으며, 다른 자료형을 저장하려고 할 시에는 빌드오류가 발생한다.

또한 처음에 선언한 크기만큼만 변수들을 저장할 수 있고, 그 이상의 인자에 접근하려 하면 오류가 발생한다.


다른 자료형을 저장하려 할 때와 다르게, 빌드는 되지만, 해당 코드가 쓰여진 곳에서 오류가 발생하는 것을 확인할 수 있다.
위 예시에서는 배열의 원소를 먼저 부여했지만, 빈 배열을 만드는 것도 가능하다.
public static void Main(string[] args)
{
int[] nums = new int[10];
Console.Write("nums = ");
for (int i = 0; i < nums.Length; i++)
{
nums[i] = i + 1;
Console.Write(nums[i] + " ");
}
Console.WriteLine();
}

10개의 원소를 가질 수 있는 정수배열 nums를 만들고, 각 원소를 i+1의 값으로 초기화한 코드이다.
배열 내부의 원소들을 정렬할 수도 있다.
public static void Main(string[] args)
{
int[] nums = { 0, 3, 7, 3, 5, 4, 2, 9, 1 };
Array.Sort(nums);
Console.Write("nums : ");
foreach (int i in nums)
{
Console.Write(i + " ");
}
}

Array.Sort() 메서드를 이용하면 배열 내부의 원소를 오름차순으로 정렬할 수 있다.
내림차순 정렬하는 메서드는 따로 없지만, 역순으로 정렬하는 메서드는 있다.
public static void Main(string[] args)
{
int[] nums = { 0, 3, 7, 3, 5, 4, 2, 9, 1 };
Array.Reverse(nums);
Console.Write("nums : ");
foreach (int i in nums)
{
Console.Write(i + " ");
}
}

Array.Reverse()는 해당 배열을 역순으로 배열한다.
만약 역순으로 정렬해야하는 일이 생긴다면, Sort로 오름차순 정렬 후, Reverse로 내림차순 정렬을 시도해볼 수 있다.
public static void Main(string[] args)
{
int[] nums = { 0, 3, 7, 3, 5, 4, 2, 9, 1 };
int[] newNums = new int[5];
Array.Copy(nums, newNums, newNums.Length);
Array.Reverse(nums);
Console.Write("nums : ");
foreach (int i in nums)
{
Console.Write(i + " ");
}
Console.WriteLine();
Console.Write("newNums : ");
foreach (int i in newNums)
{
Console.Write(i + " ");
}
Console.WriteLine();
}

Array.Copy(복사할 배열 , 복사받을 배열 , 복사할 크기)를 이용해 배열의 값을 복사할 수도 있다.
만약 복사할 크기가 두 배열 중 어느 것의 크기보다 크다면,
예를들어 예시 코드에서 Array.Copy(nums, newNums, nums.Length); 라고 바꿔 적을 경우 값이 나오지 않으며 오류가 발생한다.

이후에 언급하는 리스트는 '컬렉션'이라고 부르며, 배열처럼 변수들을 저장할 수 있는 자료구조이지만,
처음 정해진 크기만 이용할 수 있는 배열과 다르게 크기를 가변적으로 설정할 수 있다.
C#에서 리스트 외에 이용할 수 있는 컬렉션은 딕셔너리(Dictionary), 큐(Queue), 스택(Stack) 등이 있지만, 오늘은 리스트만 다룰 것이다.
2. 리스트(List)
public static void Main(string[] args)
{
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
Console.Write("list : ");
for (int i = 0; i < list.Count; i++)
{
Console.Write (list[i] + " ");
}
Console.WriteLine();
list.Remove(3);
Console.Write("list : ");
for (int i = 0; i < list.Count; i++)
{
Console.Write(list[i] + " ");
}
Console.WriteLine();
}

예시코드는 정수리스트 list에 1, 2, 3, 4를 추가한 다음에 출력하고, 3을 제거한 다음, 다시 출력하는 코드이다.
리스트에서는 Add() 메서드를 이용해 원소를 추가할 수 있고, Remove를 이용해 원소를 제거할 수도 있다.
배열에서는 크기를 알기 위해 Length를 이용했지만, 리스트에선 Count를 이용한다.
public static void Main(string[] args)
{
List<string> list = new List<string>();
list.Add("첫번째");
list.Add("두번째");
list.Add("세번째");
list.Add("네번째");
list.Insert(1, "첫번째와 두번째 사이에 들어가기");
foreach (string item in list)
{
Console.WriteLine(item);
}
}

Insert() 를 이용하면 해당 인덱스에 특정 값을 삽입할 수 있다.
예시 코드에서 list[0]~ list[3] 에 "첫번째" ~ "네번째"가 값에 들어가 있을 때, "첫번째와 두번째 (생략)" 의 값을 list[1]의 자리에 넣고, 기존의 list[1]~list[3]에 있던 값들은 뒤로 한칸씩 밀게된다.
리스트에서도 배열에서 썼던 Sort와 Reverse를 그대로 사용할 수 있다.
public static void Main(string[] args)
{
List<string> list = new List<string>();
list.Add("첫번째");
list.Add("두번째");
list.Add("세번째");
list.Add("네번째");
list.Reverse();
foreach (string item in list)
{
Console.WriteLine(item);
}
Console.WriteLine("====================");
list.Sort();
foreach (string item in list)
{
Console.WriteLine(item);
}
}

Reverse로 역순으로 정렬하고, Sort를 하니 예시코드의 문자열의 경우, 가나다 순으로 정렬되는 것을 확인할 수 있다.
'내일배움캠프 TIL' 카테고리의 다른 글
| 내일배움캠프 13일차 TIL "텍스트게임 장비 구현" (0) | 2024.09.30 |
|---|---|
| 내일배움캠프 12일차 TIL "딕셔너리, 스택, 큐" (0) | 2024.09.27 |
| 내일배움캠프 10일차 TIL "문자열 처리" (0) | 2024.09.25 |
| 내일배움캠프 9일차 TIL "클래스, 인터페이스" (0) | 2024.09.24 |
| 내일배움캠프 8일차 TIL "조건문, 반복문, 메서드" (0) | 2024.09.23 |