我有一个二维数组,如下所示:
char[,] str = new char[2,50];
现在,在我将内容存储在str[0]和str[1]中之后,如何将其存储在中
string[] s = new string[2];
我试过
s[0] = str[0].ToString();
但这似乎是一个错误:VC#在大括号内需要"两个"索引,这意味着我只能转换数组中的一个字符。有没有办法将整个str[0]转换为字符串?还是将其更改为锯齿状阵列是唯一的解决方案?
由于各种原因,锯齿状数组几乎总是最佳解决方案,这就是一个很好的例子。数组数组比多维数组具有更大的灵活性。在这种情况下,一旦你在一个字符数组中有了值,那么字符串类上的构造函数就可以用来从中创建一个字符串
此外,锯齿状数组将由"向量"(即,具有零下界索引的一维数组)组成,这些向量在.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]);
假设尺寸固定为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());
}