통상 배열을 0으로 일괄 초기화 한다면,C++의 경우 int myNumArr[45] = {0,}이기에
C#에서는 통상. int[] myNumArr = new int[45] { 0, }; 생각할것같은데.. 얘는 이게 안된다.
그렇다고 for문을 돌린다.. ?
복잡한것 싫어하는 내입장엔 그냥 쓰던것을 선호할 수 있겠다. 사실 한줄로 쓰면 얼마 안된다.
int myNumArr[] = new int[45];
for(int i=0;i<45;i++){myNumArr[i]=0;}
저렇게 두줄이 아니라 한번에 선언하면서 초기화를 시키려면 다음 처럼 해야한다. 먼저 프로그램을 짜면서 알고 넘어갔던건데, 오랜만에 또 코드를 들여다 보며 되새김해본다.
int[] myNumArr = Enumerable.Repeat<int>(0,45).ToArray<int>();
* myNumArr배열에 0으로 45요소까지 일괄 초기화 하라... (int numArr[45] = {0,}개념..)
원형은 이건데..
예제는 다음과 같다. (출처 : https://learn.microsoft.com/ko-kr/dotnet/api/system.linq.enumerable.repeat?view=net-8.0#code-try-1)
IEnumerable<string> strings =
Enumerable.Repeat("I like programming.", 15);
foreach (String str in strings)
{
Console.WriteLine(str);
}
/*
This code produces the following output:
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
I like programming.
*/
예제만 보면,
IEnumerable<int> myNumArr = Enumerable.Repeat(0,45);
가능할듯 하지만 안된다... 그리고 다소 복잡한 저 방식의 초기화로 된다.
String은 가능한데, 그외 타입에는 데이터 타입을 맞춰 주면서, 배열로 변환해주고 배열로 받아야한다.
대신에 한번에 초기화 하면서, 0으로 초기화 와 배열의 크기도 한번에 정할 수 있고, 0뿐아니라, 다른 숫자로도 일괄 초기화 할 수있다는 장점이있다.
int[] myNumArr = Enumerable.Repeat<int>(100,100).ToArray<int>();
//100으로 일괄 초기화.
* int형 배열 myNumArr의 크기는 100이 되며 이 100의 요소의 값들을 일괄적으로 100으로 초기화 한다. ..