Sort / Reverse
- 배열의 항목을 오름차순 or 내림차순으로 정렬
- 정적메소드
- System.Array.Sort(배열객체)
- System.Array.Reverse(배열객체)
public static void ArrayMethod()
{
int[] row = new int[10] {23,45,1,4,98,22,6,16,23,48};
Console.Write("Source : \t\t");
ArrayPrint(row);
//오름차순정렬
Array.Sort(row);
Console.Write("Sort : \t\t");
ArrayPrint(row);
//내림차순정렬
Array.Reverse(row);
Console.Write("Reverse : \t\t");
ArrayPrint(row);
}
public static void ArrayPrint(int[] row)
{
for(int i=0;i<row.Length;i++)
{
Console.Write("{0,3}", row[i]);
}
Console.WriteLine();
}
Clear
- 배열의 요소들을 0 or null로 초기화
- 배열자체는 남아있다.
- System.Array.Clear(배열명, 시작인덱스, 길이)
int[] row = new int[10] {23,45,1,4,98,22,6,16,23,48};
Console.Write("Source :\t");
for(int i=0;i<row.Length;i++)
{
Console.Write("{0,3}", row[i]);
}
Console.WriteLine();
//Clear
Array.Clear(row,3,1); //3번째부터 1개 clear
//Array.Clear(row,6,5); //6번째부터 5개 clear -> 인덱스가 배열을 넘어가므로 에러
Console.Write("3-1 :\t\t");
for(int i=0;i<row.Length;i++)
{
Console.Write("{0,3}", row[i]);
}
Console.WriteLine();
Array.Clear(row,0,row.Length);
Console.Write("0-Length :\t");
for(int i=0;i<row.Length;i++)
{
Console.Write("{0,3}", row[i]);
}
Console.WriteLine();
Clone
- 배열의 복사본 생성(전체복사)
- 동일한 요소를 가지는 또 하나이 배열 객체 생성
//배열복사
public static void arrayClone()
{
int [] row = {0,1,2,3};
int [] copyRow = (int[]) row.Clone();
//원본을 복사해서 또하나의 다른 배열을 만든다. row와 copyRow는 별개.
//int [] copyRow = row.Clone();
//에러, Clone자체가 오브젝트로 반환을 시키기 때문에 형변환을 꼭 해주어야 한다.
/*
* int [] copyArray = row;
* row배열의 참조변수를 복사하기 때문에 row와 copyArray는 같은 배열을 가르킴
* copyArray[0] = 100;
* 복사본의 값을 변경시키면 row와 copyArray의 배열값은 같이 변경됨
*/
Console.Write("\nSource :\t");
for(int i=0;i<row.Length;i++)
{
Console.Write("{0,3}", row[i]);
}
Console.WriteLine();
Console.Write("\nCopy :\t");
for(int i=0;i<copyRow.Length;i++)
{
Console.Write("{0,3}", copyRow[i]);
}
Console.WriteLine();
}
GetLength : 해당차원의 길이 변환
GetLowerBound : 해당차원의 시작첨자 반환
GetUpperBound : 해당차원의 끝 첨자 반환
int [] row = {0,1,2,3};
Console.WriteLine("GetLength : {0}", row.GetLength(0)); // 4
Console.WriteLine("GetLowerUbound : {0}", row.GetLowerBound(0)); // 0
Console.WriteLine("GetUpperUbound : {0}", row.GetUpperBound(0)); // 3
IndexOf / LastIndexOf
- 배열에서 지정된 값을 검색, 위치값을 돌려준다.
- 검색된 값이 없거나 실패하면 -1리턴
- IndexOf(배열명, 검색인자)
- LastIndexOf(배열명, 검색인자)
public static void arrayIndexOf()
{
//배열안에서 특정위치값 찾기
int[] row = new int[10] {23,45,1,4,32,22,6,32,23,48};
int firstSearch, lastSearch;
firstSearch = Array.IndexOf(row, 32); //배열의 앞에서 부터 찾는다. 결과 : 4
lastSearch = Array.LastIndexOf(row, 32); //배열의 뒤에서 부터 찾는다. 결과 : 7
Console.Write("Source : ");
for(int i=0;i<row.Length;i++)
{
Console.Write("{0,3}", row[i]);
}
Console.WriteLine();
Console.WriteLine("IndexOf : 32의 위치값은 {0}", firstSearch);
Console.WriteLine("LastIndexOf : 32의 위치값은 {0}", lastSearch);
}
메소드에서의 배열사용
- 배열의 입력 인자로 사용
참조형이라 Call By Reference로 적용
- 메소드의 반환값으로 사용
하나이상의 값을 반환시...
public static void MethodArrary()
{
int [] row = {1,2,3,4,5};
Console.WriteLine("Main내 메소드 실행전 : " + row[0]);
callArrayMethod(row);
Console.WriteLine("Main내 메소드 실행후 : " + row[0]);
Console.WriteLine("--------------------------------------");
Console.WriteLine("Main내 메소드 실행전 : " + row[0]);
callArrayMethod((int[])row.Clone());
Console.WriteLine("Main내 메소드 실행후 : " + row[0]);
Console.WriteLine("--------------------------------------");
callArrayMethod(new int[4] {2,3,4,5});
}
public static void callArrayMethod(int[] row2)
{
row2[0]++;
Console.WriteLine("배열의 Clone하여 메소드로 넘겼을때 메소드 내 : " + row2[0]);
}
커맨드 라인 입력 인자
- 콘솔에서 실행파일 다음에 인자전달(Main에게...)
- 보통옵션값으로 사용한다.
- static void Main(string[] args){
for(int i=0; i<args.Length;i++)
{
Console.WriteLine(args[i]);
}
}
ex) c:\csc Test.cs
배열예외처리
- 보통 배열첨자 범위를 벗아난 예외발생
- IndexOutOfRangeException
[출처] [펌] [20040503] 배열메소드|작성자 눈꽃천사