C#에서 2 차원 직사각형 문자 배열의 한 줄에서 문자열을 어떻게 만들려면?
-
10-07-2019 - |
문제
나는 2 차원 배열이 있습니다.
char[,] str = new char[2,50];
이제 STR [0]과 STR [1]에 내용을 저장 한 후에 어떻게 저장합니까?
string[] s = new string[2];
?
나는 시도했다
s[0] = str[0].ToString();
그러나 그것은 오류 인 것 같습니다. vc#은 교정기 내에서 '두 개의'지수를 기대합니다. 즉, 배열에서 문자 만 변환 할 수 있습니다. 전체 str [0]을 문자열로 변환하는 방법이 있습니까? 아니면 들쭉날쭉 한 배열로 변경하는 것이 유일한 솔루션입니까?
해결책
들쭉날쭉 한 배열은 거의 항상 다양한 이유로 가장 좋은 솔루션이며, 이것은 좋은 예입니다. 다차원 배열보다 배열 배열로 사용할 수있는 유연성이 훨씬 더 많습니다. 이 경우 숯 배열에 값이 있으면 문자열 클래스의 생성자를 사용하여 문자열을 만들 수 있습니다.
또한, 들쭉날쭉 한 배열은 "벡터"(즉, 제로 차원 바운드 인덱스가있는 단일 차원 배열)로 구성되며, 이는 CLR에 의해 특별한 처리를 받기 때문에 .NET에서 훨씬 더 선호합니다.
따라서 나머지 프로그램이 무엇을하는지 모르면 내 추천이 될 것입니다.
Jagged Array를 사용하는 대신 배열 인덱스를 통해 루핑하여 수동으로 문자열을 구성하려는 경우 StringBuilder 클래스를 사용하여 수행하는 것이 좋습니다.
방금 이것을 강타했지만 다음과 같은 것이어야합니다.
// For the multi-dimentional array
StringBuilder sb = new StringBuilder();
for (int stringIndex = 0; stringIndex < s.Length; stringIndex++)
{
sb.Clear();
for (int charIndex = 0; charIndex < str.UpperBound(1); charIndex++)
sb.Append(str[stringIndex,charIndex]);
s[stringIndex] = sb.ToString();
}
// For the jagged array
for (int index = 0; index < s.Length; index++)
s[index] = new string(str[index]);
다른 팁
치수가 2x50으로 고정되어 있다고 가정합니다.
char[,] str = new char[2,50];
// populate str somehow
// chose which of the strings we want (the 'row' index)
int strIndex = 0;
// create a temporary array (faster and less wasteful than using a StringBuilder)
char[] chars = new chars[50];
for (int i = 0; i < 50; i++)
chars[i] = str[strIndex, i];
string s = new string[chars];
들쭉날쭉 한 배열을 사용하면 더 쉽고 성능이 뛰어납니다.
char[][] str = new char[2][];
그런 다음 쓸 수 있습니다.
string s = new string(characters[0]);
들쭉날쭉 한 배열 사용에 동의합니다. 이 헬퍼 방법을 사용하여 들쭉날쭉 한 배열을 초기화 할 수 있습니다.
static T[][] InitJaggedArray<T>(int dimension1, int dimension2)
{
T[][] array = new T[dimension1][];
for (int i = 0; i < dimension1; i += 1)
{
array[i] = new T[dimension2];
}
return array;
}
그래서
char[,] str = new char[2,50];
될 것입니다
char[][] str = ArrayHelper.InitJaggedArray<char>(2, 50);
그런 다음 그렇게 요소에 액세스 할 수 있습니다
str[0, 10] = 'a';
그리고 그것을 끈으로 만들려면 당신이 할 것입니다
string s = new string(str[0]);
LINQ로 할 수 있습니다.
string[] Convert(char[,] chars)
{
return Enumerable.Range(0, chars.GetLength(1))
.Select(i => Enumerable.Range(0, chars.GetLength(0))
.Select(j => chars[j, i]))
.Select(chars => new string(chars.ToArray());
}