배열 생성과 동시에 전체 값 초기화 하기

@세미콜론 님의 글입니다. :slight_smile:
https://bonguk.github.io/posts/배열-생성과-동시에-전체-값-초기화/

3 Likes

@세미콜론 님의 글 잘 읽었습니다! 그런데 글에서 일단 두 가지가 고쳐져야 할 것 같아 제보드립니다.!

첫 번째 예제에서,

int[] intArray = new int[4] { 0, 0, 0, 0 }();

위 코드를 실제로 컴파일하면, Method name expected라는 컴파일 오류가 생깁니다. 배열을 초기화하는 것이어서 뒤에 오는 () 연산자는 제거되는 것이 맞는 것 같고요,

두 번째 예제에서,

for (int i = 0; i < intArray.length; i++) { ... }

위 코드에서 intArray.length 속성은 실존하지 않고, 아마 intArray.Length를 의도하신 것 같습니다.

그리고 세 번째 예제에서 char 타입의 배열을 만들면서 같은 문자로 채우려고 할 때, char[] 타입으로 바로 뽑아내지는 않지만, string 타입으로 동등하게 만드는 방법이 닷넷 초기부터 제공되던 API가 있어서 덧붙여 기록해봅니다.

string str = new string('S', 100);
char[] charArray2 = str.ToCharArray();

// 반대로 char[] 타입을 string으로 바꾸는 것도 가능합니다.
string str2 = new string(charArray);

혹시 괜찮으시다면, 그리고 가능하시다면 이런 피드백을 블로그 글이나 GitHub 리포지터리에서 잘 받아볼 수 있도록 댓글 플러그인을 붙이거나, GitHub 이슈 기능을 리포지터리에서 활성화해주신다면 더 좋을 것 같습니다.

4 Likes

피드백 감사합니다 !!

수정 하도록 하겠습니다 !!

추후에 댓글 플러그인을 한번 도입 해보도록 고민 하여 보겠습니다 !

5 Likes

Array.Fill() 도 소개해봅니다.

string[] stringArray = new string[3000];
Array.Fill(stringArray, "S");

int[] intArray = Fill(1000, 10);

T[] Fill<T>(int length, T defaultValue)
{
    var result = new T[length];
    Array.Fill(result, defaultValue);
    return result;
}

.NET Framework에서는 지원하지 않는 것 같으며, .NET Core 2.0부터 지원 되는 메소드로 보입니다.

Array.Fill()는 내부적으로 Span<T>.Fill()을 호출하여 매우 빠르게 동작합니다.

        public static void Fill<T>(T[] array, T value)
        {
            if (array == null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array);
            }
 
            if (!typeof(T).IsValueType && array.GetType() != typeof(T[]))
            {
                for (int i = 0; i < array.Length; i++)
                {
                    array[i] = value;
                }
            }
            else
            {
                new Span<T>(array).Fill(value);
            }
        }
6 Likes

좋은 팁 감사합니다 !

궁금한게 하나 있습니다 !
Array.Fill()의 내부적 기능들을 설명 해주셨는데 이러한 내부적 기능들은 어떻게 파악 할 수 있나요 ?

2 Likes

https://source.dot.net/#System.Private.CoreLib/Array.cs,8e23f7b1df2406cc

4 Likes