배열 ( Array)

강성현
∙∙조회 9
배열 ( Array)

배열이란?

배열(array)란, 같은 형식의 값 여러개를 하나의 이름으로 묶고, 번호(index)로 구분해 꺼내 쓰는 자료 구조입니다.

csharp
배열의 구조 
// Type[] Name;

int[] numbers = {1, 3, 6, 7};
int[] numbers = new int[] {1, 3, 6, 7};
int[] numbers = new int[4];
  • 배열의 길이는 만들때 정하고, 만든 뒤에는 바꿀 수 없습니다.
  • C#에서의 배열은 참조 형식(reference type)입니다.
  • 배열에 들어있는 각 데이터들을 원소라고 하며, 데이터에 접근하기 위해 사용되는 번호는 index(인덱스) 라고 합니다.
csharp
// 범위를 벗어난 인덱스 접근 : 에러
Console.WriteLine(numbers[5]);
Console.WriteLine(numbers[-1]);

 

 


1-1) 배열의 복사

배열 변수는 칸 묶음 자체가 아니라 칸 묶음이 있는 곳을 가리킵니다.

csharp
int[] original = { 10, 20, 30 };  
int[] copy = original;      // 칸 묶음이 복제되는 것이 아닙니다.

copy[0] = 999;

Console.WriteLine(original[0]);   // 999 가 출력됩니다.

위와 같이 새로운 배열 변수를 만들어서 할당을 해주더라도, 값 자체를 복사해서 따로 가지고 있는 것이 아니기 때문에

아래와 같은 방법으로 배열 복사를 할 수 있다.

csharp
int[] origin = new int[] { 1, 2, 3, 4 };
int[] copy = new int[origin.Length];       
 
Array.Copy(origin, copy, origin.Length);
copy[0] = 5;

Console.WriteLine(copy[0]); // 출력 : 5

 


1-2) 배열의 길이

배열이름. Length

구분값
길이Length
첫 인덱스0
마지막 인덱스Length - 1
쓸 수 없는 인덱스Length 이상, 음수

1-3) 다차원 배열

행과 열로 이루어진 격자 입니다.
요소 하나를 지목하려면 번호가 두 개 필요합니다.
tile[1, 2] > 앞의 번호가 행(가로줄), 뒤의 번호가 열(세로줄)입니다.

  • 실제로는 메모리에 격자형태로 배치되는 것이 아니라 일렬로 배치됩니다.
chsarp
2차원배열의 선언방식
int [,] matrix;
int [,] matrix = new int[3,3];

 

csharp
int[,] matrix =
{
    { 1, 2, 3 },
    { 4, 5, 6 },
    { 7, 8, 9 },
    { 10, 11, 12 }
};
  • 위에 있는 2차원배열 크기를 구해본 표입니다.
구하려는 것표기위 예제에서의 값
전체 요소 수tile.Length12
행 수tile.GetLength(0)4
열 수tile.GetLength(1)3
csharp
int[,] matrix =
{
	{ 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, 43, 44, 45, 46, 47, 48, 49, 50},
};

Console.WriteLine(matrix[3,7]); // 38

 

csharp
3차원배열의 선언방식
int[,,] matrix =
{
    {
        { 1, 2, 3 },
        { 4, 5, 6 }
    },
    {
        { 7, 8, 9 },
        { 10, 11, 12 }
    }
};

1-4) 문자열의 수정방법

string 문자열은 char 변수들의 배열이다.

csharp
// 문자열 수정방법

string text = "반복문 주제에서 다룹니다";
        
Console.WriteLine(text[1]); // 출력 : 복

// text[1] = "형"; // 안됨
char[] changeChars = text.ToCharArray();
changeChars[1] = '형';

string newText = new string(changeChars);
Console.WriteLine(newText);

 

csharp
// 유저의 입력을 받고 합하는 함수
// 조건 : 56 21 87 입력 
string userInput = Console.ReadLine();
string[] inputs = userInput.Split(' '); // 띄워쓰기 한칸 기준으로 자르겠다.

int[] numbers = new int[3];
numbers[0] = int.Parse(inputs[0]);
numbers[1] = int.Parse(inputs[1]);
numbers[2] = int.Parse(inputs[2]);
int result = numbers[0] + numbers[1] + numbers[2];

Console.WriteLine(result); // 출력 : 164