배열
- 같은 데이터형을 갖는 데이터 집합
- 하나의 변수명을 가지고 여러개의 동일한 데이터 형식을 포함
- 컬렉션(Collection)은 서로 다른 데이터를 묶는 집합
- Call by Reference
배열선언
- 배열은 System.Array를 상속받는 객체
- 인스턴스화를 해야 사용가능
- 자료형[차원] 배열명 = new 자료형[요소갯수]{초기화 리스트};
- 첨자는 항상 0부터 시작
1. int [] result;
2. long result;
3. long result [3]; // X, result 와 [3] 자리가 바꼈고, 숫자도 들어가면 안됨.
4. [] long result; // X, 자료형과 []가 바뀜
5. char[,] result;
6. int [,,]; // X, 배열명이 바뀜
7. float [10,2] result; // X, 숫자가 들어가면 안됨
8. result = {1,2,3,4,5}; // X, 형식이 틀림
배열선언 예제
int[] result; //배열을 선언만 한 것. 메모리에 배열변수가 생성, 배열에 대한 요소의 메모리는 생성하지 않음.
int[] result={1,2,3,4,5}; //선언과 동시에 값을 할당
int[] result=new int[5]; //선언을 하고 배열을 생성, 크기는 브래킷안의 숫자 만큼의 요소가 생성
int[] result=new int[5] {1,2,3,4,5}; //이 방식을 줄여서 두 번째 처럼 사용가능
배열 인스턴스화
- 배열의 크기가 지정된다.
- Value Type배열은 자동초기화 (정수형->0, 실수형->0.0, bool->false, char->space)
- 초기화리스트 : 초기화 리스트의 수와 배열의 요소의 수가 일치
1차원 배열 인스턴스화 & 초기화
int [] nums = new int[3] {1,2,3};
int [] nums = new int[] {1,2,3};
int [] nums = {1,2,3};
2차원 배열 인스턴스화 & 초기화
int [,] nums = new int [2,2] {{1,2},{3,4}};
int [,] nums = new int [,] {{1,2},{3,4}};
int [,] nums = {{1,2},{3,4}};
배열의 크기
- 1차원 배열 : 배열명.Length
- 2차원 배열 : GetLength
public static void ArraySeek()
{
//1차원 배열탐색
int[] row = new int[10] {1,2,3,4,5,6,7,8,9,10};
//for문
for(int i=0;i<row.Length;i++)
Console.Write("{0}\t", row[i]);
Console.WriteLine();
//foreach문
foreach(int item in row)
Console.Write("{0}\t", item);
Console.WriteLine();
//2차원 배열탐색
int [,] table = new int[2,5] {{2,5,7,8,4},{9,3,6,4,2}};
//int rank = table.Rank;//배열의 차원 : 2
//int index = table.Length; // 값: 10, 전체배열크기값이 들어감, for문에서 Exception발생
// -> 올바른 예제 int index = table.Length/rank;
//위처럼 반복할 횟수를 변수에 담아서 사용할수도 있지만 번거로움때문에 대부분 GetLength사용.
//for문
for(int i=0; i<table.GetLength(0); i++) //2차원배열에서의 1차원방의 갯수(행갯수)만큼 실행
for(int j=0; j<table.GetLength(1); j++) //1차원배열의 방수(열갯수)만큼 실행
Console.Write("{0}\t", table[i,j]);
Console.WriteLine();
//foreach문
foreach(int item in table)
Console.Write("{0}\t",item);
Console.WriteLine();
//배열을 생성하면 2차원이상도 실제로는 한줄에 모두 생성되므로 위처럼 실행하면 배열의 모든값들이 출력
//배열의 차원과는 상관없이 배열값들만 필요하다고 생각될때 사용용이.
}
배열의 차원
- Rank : Array의 차수(차원의 수)를 가져옵니다.
불규칙 배열(Jagged Array)
- 하나의 배열 안에 여러 크기를 가지는 배열이 내장
- 배열선언 : 데이터형[ ][ ] 배열명 = new 데이터형[크기][ ];
- 사용의 필요성 : 배열의 배열을 선언해야 할 경우, 메모리를 효율적으로 관리해야 할 경우
public static void jaggedArray()
{
//불규칙 배열 선언
int[][] jaggedArray = new int[5][];
jaggedArray[0] = new int[] {1,15};
jaggedArray[1] = new int[] {3,5,7};
jaggedArray[2] = new int[] {10,20,30,40,50};
jaggedArray[3] = new int[] {80,100};
jaggedArray[4] = new int[] {2,5,150,9};
//불규칙 배열요소 접근
for(int i=0; i<jaggedArray.Length;i++)
{
for(int j=0; j<jaggedArray[i].Length; j++)
Console.Write("***");//jaggedArray[i],[j];
Console.WriteLine();
}
}
//불규칙배열과 2차원 배열을 함께 사용
public class JaggedArrayTest{
public static void Main(){
int[ ][,] jagArray=new int[3][,];
jagArray[0]=new int[2,2] {{3,4},{5,6}};
jagArray[1]=new int[3,2];
jagArray[1][0,0]=-1;
jagArray[1][0,1]=-2;
jagArray[1][1,0]=-3;
jagArray[1][1,1]=-4;
jagArray[1][2,0]=-5;
jagArray[1][2,1]=-6;
jagArray[2] = new int[3,3]{ {3,4,6}, {4,5,7}, {7,8,6}};
for(int a=0; a<jagArray.Length; a++){ //3회 실행
for(int b=0; b<jagArray[a].GetLength(0); b++){ //2차원배월의 행만큼 실행 : 2회
for(int c=0; c<jagArray[a].GetLength(1); c++){ //2차원배열 각행별 컬럼 배열값 출력
Console.Write("jagArray["+a+"]["+b+","+c+"]:"+jagArray[a][b,c]+'\t');
}
Console.WriteLine();
}
Console.WriteLine();
}
}
}
*실행결과
jagArray[0][0,0]:3 jagArray[0][0,1]:4
jagArray[0][1,0]:5 jagArray[0][1,1]:6
jagArray[1][0,0]:-1 jagArray[1][0,1]:-2
jagArray[1][1,0]:-3 jagArray[1][1,1]:-4
jagArray[1][2,0]:-5 jagArray[1][2,1]:-6
jagArray[2][0,0]:3 jagArray[2][0,1]:4 jagArray[2][0,2]:6
jagArray[2][1,0]:4 jagArray[2][1,1]:5 jagArray[2][1,2]:7
jagArray[2][2,0]:7 jagArray[2][2,1]:8 jagArray[2][2,2]:6
배열복사(배열변수복사)
- 배열이 참조형 변수라 번지수를 공유
int[ ] mydream = new int[ ]{1,2,3,4,5,6};
int[ ] myref1 = mydream;
int[ ] myref2 = myref1;
// 배열 변수들이 모두 하나의 메모리를 참조하고 있기 때문에 아무리 값을 할당해도 하나의 메모리를 그 대상으로 한다.
//mydream == myref1 == myref2 //참
배열비교 예제
int[] array_1=new int[5] {1,2,3,4,5};
int[] array_2;
array_2 = array_1;
if(arrray_1 == array_2); //참
int[] array_1=new int[5] {1,2,3,4,5};
int[] array_2 = new int[5] {1,2,3,4,5};
if(array_1 == array_2);
//거짓, new 키워드로 서로 다른 배열개체를 선언, 배열 요소들의 값은 같을 지언정 다른 개체가 되는 것이다.
[출처] [펌] [20040429] 배열|작성자 눈꽃천사
if(array_1[0] == array_2[0]); //참, 값을 비교