이번 포스트에서는 Array, 즉 배열에 대해서 알아보려고 합니다.
배열이라 함은 동일한 형식의 Data 집합이라고 할 수 있습니다. 그리고 배열은 생성 시점 즉 런타임에 크기가 결정 된다는게 특징이라 할 수 있지요.
배열은 System.Array 클래스의 상속 객체로 참조형이라는 특성을 가지고 있습니다.
배열 객체 생성 형식을 봐보면요
자료형 [] 이름;
이름 = new 자료형[크기];
또는
자료형 [] 이름 = new 자료형[크기];
이런식으로 배열을 생성합니다.
배열을 구현을 해보겠습니다~~.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace ArrayTest
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 Random r = new Random();
13 int[] ar = new int[10];
14 for (int i = 0; i < ar.Length; i++)
15 {
16 ar[i] = r.Next(100, 1000);
17 }
18 for (int i = 0; i < ar.Length; i++)
19 {
20 Console.WriteLine("ar[{0}] = {1}", i, ar[i]);
21 }
22 }
23 }
24 }
보시면 랜덤 클래스를 이용하여 배열의 10개의 공간에 난수를 넣어서 그것을 다시 출력 하는 코드입니다. 결과 값은 다음과 같습니다. 뭐 실제로 출력되는 결과는 모두 다르겠지만 형식은 이런 형식으로 출력될 것입니다.
그럼 배열의 몇 기능을 알아 볼까요. 우선 sort와 reverse 라는 녀석들을 볼텐데요. 이름에서 볼 수 있듯이 해당 배열의 데이터를 정렬하는 메소드들 이죠. sort는 오름차순 정렬, reverse는 내림차순 정렬이라고 할 수 있습니다.
윗 코드 하단에 다음과 같은 코드를 더 입력 해서 실행해 보겠습니다.
22 Console.WriteLine("After Sorting.....");
23 Array.Sort(ar);
24 for (int i = 0; i < ar.Length; i++)
25 {
26 Console.WriteLine("ar[{0}] = {1}", i, ar[i]);
27 }
sort 하는 부분을 추가해서 다시 출력해 보았습니다. 실행 하게 되면 다음과 같이 이쁘게 정렬 되는것을 볼수 있지요.
그리고 이번엔 IndexOf를 알아볼까요 IndexOf는 해당 문자를 찾아서 그 문자의 위치를 알려주는 메소드인데요 배열에서 쓰게 되면 해당 배열에 어느 위치에 해당 데이터가 위치해 있는지 알려주는 기능을 하게 됩니다.
위 코드에 다음 코드를 입력해서 실행하여 보시면 해당 숫자의 위치를 찾는 것을 보실 수 있으실겁니다.
28 Console.Write("Input Data to Search : ");
29 int data = int.Parse(Console.ReadLine());
30 int index = Array.IndexOf(ar, data);
31 if (index > -1)
32 Console.WriteLine("{0}은(는) {1}위치에 있습니다.", data, index + 1);
33 else
34 Console.WriteLine("배열에 포함되지 않은 데이터");
참 유용한 메소드이죠~!! 비주얼 스튜디오 인텔리젠스를 보면 정말 많은 메소드들이 존재하는 것을 볼수 있지만 그 메소드에 대해서는 MSDN을 보아도 많은 정보를 찾으실 수 있을 겁니다~
좀 늦었지만 배열 초기화에 대해서 또 이야기 해볼까 합니다. 배열 초기화 하는 방법은 제가 아는건...3가지가 있습니다.
1 int[] ar2 = new int[5] { 1, 2, 3, 4, 5 };
2 int[] ar2 = new int[] { 1, 2, 3, 4, 5 };
3 int[] ar2 = { 1, 2, 3, 4, 5 };
이렇게 3가지인데요. 초기화는 뭘로 하느냐는 저는 상관 없는것 같더군요. 여러분 스타일에 맞춰서 하시면 될꺼라 생각되옵니다. 또는 그때 그때 상황에 따라 하셔야 될때도 있겠지요~^ㅡ^
배열 초기화까지 알아보았으니 다차원 배열에 대해서 알아 보아야 될꺼 같군요. 다차원 배열. 이름만 들어도 저는 머리가 아파오는데요 ㅜㅜ 솔직히 다차원 배열 2차원까지는 자주 쓰지만 3차원 배열부터는 특정 천문적인 프로그램에서 빼고는 거의 쓰지 않는 걸로 알고 있습니다. 그래서 2차원배열에 대해서 알아 볼께요
2차원 배열 선언 및 생성 초기화는 일차원 배열과 비슷합니다.
1 int[,] ar = new int[4, 6];
또는
1 int[,] ar3 =
2 new int[4, 6]
3 {
4 {1, 2, 3, 4, 5, 6},
5 {1, 2, 3, 4, 5, 6},
6 {1, 2, 3, 4, 5, 6},
7 {1, 2, 3, 4, 5, 6}
8 };
이런식으로 초기화까지 할 수도 있지요. 많이 다를꺼는 없습니다. 간단히 2차원 배열의 구현을 보여드리겠습니다.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace MultiArray
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 int[,] ar = new int[4, 6];
13 Random r = new Random();
14 for (int i = 0; i < ar.GetLength(0); i++)
15 {
16 for (int j = 0; j < ar.GetLength(1); j++)
17 {
18 ar[i, j] = r.Next(100, 1000);
19 }
20 }
21 for (int i = 0; i < ar.GetLength(0); i++)
22 {
23 for (int j = 0; j < ar.GetLength(i); j++)
24 {
25 Console.Write("{0,-10}", ar[i, j]);
26 }
27 Console.WriteLine();
28 }
29 }
30 }
31 }
별로 다른건 없습니다. 2차원 배열 생성후에 2차원 배열에 난수를 입력하고 그것을 다시 출력하는 겁니다.
특이한 점은 ar.GetLength(0) 이라는 것인데요. GetLength는 배열의 행의 위치를 말해 주는 겁니다. 0은 첫번째 행 1은 두번째 행이 되겠지요. 실행 결과를 보면 다음과 같은 결과를 볼 수 있을 겁니다~
마지막으로 Zagged Array라는 넘을 알아보고 끝내도록 하겠습니다~ ^^
Zagged는 배열의 크기가 딱 정해져 있지않고 지그재그로 되어 있다고 해서 이름이 붙여진 것입니다. 이 배열이 잘 쓰이는지는 모르겠지만...그래도 재미있는 배열이라서 한번 알아보도록 하겠습니다.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace ZaggedArray
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 Random r = new Random();
13 int[][] ar = new int[10][];
14 for (int i = 0; i < ar.Length; i++)
15 {
16 ar[i] = new int[r.Next(1, 10)];
17 }
18 for (int i = 0; i < ar.Length; i++)
19 {
20 for (int j = 0; j < ar[i].Length; j++)
21 {
22 ar[i][j] = r.Next(100, 1000);
23 }
24 }
25 for (int i = 0; i < ar.Length; i++)
26 {
27 for (int j = 0; j < ar[i].Length; j++)
28 {
29 Console.Write("{0,-6}",ar[i][j]);
30 }
31 Console.WriteLine();
32 }
33 }
34 }
35 }
위에서 보신것과 같이 첫번째 행의 숫자는 정해져 있지만 열의 길이가 정해지지 않고 아래에서 랜덤으로 정해지는 것을 볼 수가 있습니다. 저것을 실행해 보면 각각 틀리겠지만 이와 같이 자기만의 스타일을 같는 배열인것을 볼 수 있지요 ^^
이번 포스팅 또한 심하게 허접하긴 했지만...그래도 도움이 되셨으면 합니다~
감사합니다~^ㅡ^