如何在C#中从二维矩形字符数组的一行创建一个字符串?

时间:2008-10-11 16:02:10

标签: c# arrays string character multidimensional-array

我有一个二维数组,如下所示:

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

现在,在我将内容存储在str [0]和str [1]之后,如何将其存储在

string[] s = new string[2];

我试过

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

但这似乎是一个错误:VC#期望大括号中的'两个'索引,这意味着我只能转换数组中的一个字符。有没有办法将整个str [0]转换为字符串?或者将其改为锯齿状阵列唯一的解决方案?

4 个答案:

答案 0 :(得分:3)

由于各种原因,锯齿状阵列几乎总是最佳解决方案,这是一个很好的例子。与多维数组相比,数组阵列具有更多灵活性。在这种情况下,一旦你有一个字符数组中的值,那么字符串类的构造函数可以用来从它创建一个字符串。

此外,锯齿状阵列将由“向量”(即具有零下界索引的单维数组)组成,这在.Net中更为优选,因为它们由CLR给予特殊处理

所以不知道你的其他程序在做什么,这将是我的建议。

如果您尝试通过循环遍历数组索引来手动构造字符串,而不是使用锯齿状数组,那么我建议使用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]);

答案 1 :(得分: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]);

答案 2 :(得分: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]);

答案 3 :(得分: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());
}