SSISO Community

갤러리정

배열 - CSharp

배열
- 같은 데이터형을 갖는 데이터 집합
- 하나의 변수명을 가지고 여러개의 동일한 데이터 형식을 포함
- 컬렉션(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 키워드로 서로 다른 배열개체를 선언, 배열 요소들의 값은 같을 지언정 다른 개체가 되는 것이다.


if(array_1[0] == array_2[0]); //참, 값을 비교

881 view

4.0 stars