문제

나는 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());
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top