@세미콜론 님의 글입니다.
https://bonguk.github.io/posts/배열-생성과-동시에-전체-값-초기화/
@세미콜론 님의 글 잘 읽었습니다! 그런데 글에서 일단 두 가지가 고쳐져야 할 것 같아 제보드립니다.!
첫 번째 예제에서,
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 이슈 기능을 리포지터리에서 활성화해주신다면 더 좋을 것 같습니다.
피드백 감사합니다 !!
수정 하도록 하겠습니다 !!
추후에 댓글 플러그인을 한번 도입 해보도록 고민 하여 보겠습니다 !
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);
}
}
좋은 팁 감사합니다 !
궁금한게 하나 있습니다 !
Array.Fill()의 내부적 기능들을 설명 해주셨는데 이러한 내부적 기능들은 어떻게 파악 할 수 있나요 ?