1

次のような2次元配列があります。

char[,] str = new char[2,50];

さて、str[0] と str[1] の両方に内容を保存した後、どのようにそれを

string[] s = new string[2];

?

私は試した

s[0] = str[0].ToString();

しかし、それはエラーのようです: VC# は中かっこ内に '2' のインデックスを想定しています。つまり、配列から文字を 1 つだけ変換できます。str[0] 全体を文字列に変換する方法はありますか? それとも、ジャグ配列に変更するのが唯一の解決策ですか?

4

4 に答える 4

3

ギザギザ配列は、さまざまな理由からほとんどの場合に最適なソリューションであり、これはその 1 つの良い例です。多次元配列よりも配列の配列の方がはるかに柔軟性があります。この場合、文字の配列に値を取得すると、文字列クラスのコンストラクターを使用して、そこから文字列を作成できます。

また、ジャグ配列は「ベクトル」(つまり、ゼロ下限インデックスを持つ 1 次元配列) で構成されます。これは、CLR によって特別な処理が与えられるため、.Net でより優先されます。

したがって、プログラムの残りの部分が何をしているのかわからなくても、それが私の推奨事項です。

ジャグ配列を使用する代わりに、配列インデックスをループして手動で文字列を作成しようとする場合は、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]);
于 2008-10-11T16:12:29.970 に答える
2

寸法が 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]);
于 2008-10-11T16:07:24.753 に答える
1

ギザギザの配列を使用することに同意します。このヘルパー メソッドを使用して、ジャグ配列を初期化できます。

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]);
于 2008-10-11T16:28:28.800 に答える
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());
}
于 2012-07-15T16:17:46.877 に答える