代码之家  ›  专栏  ›  技术社区  ›  Sundar R

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

  •  1
  • Sundar R  · 技术社区  · 17 年前

    我有一个二维数组,就像这样:

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

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

    string[] s = new string[2];
    

    ?

    我试过

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

    但这似乎是一个错误:vc期望在大括号内有“two”索引,这意味着我只能从数组中转换一个字符。是否有方法将整个str[0]转换为字符串?或者将其更改为锯齿数组是唯一的解决方案?

    4 回复  |  直到 13 年前
        1
  •  3
  •   Jeffrey L Whitledge    17 年前

    由于各种原因,交错数组几乎总是最好的解决方案,这是一个很好的例子。与多维数组相比,数组具有更大的灵活性。在这种情况下,一旦在一个字符数组中有了值,就可以使用String类上的构造函数从中创建一个字符串。

    此外,交错数组将由“向量”(即具有零下界索引的一维数组)组成,这在.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]);
    
        2
  •  2
  •   Drew Noakes    17 年前

    假设尺寸固定为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]);
    
        3
  •  1
  •   ICR    17 年前

    我同意使用锯齿状数组。可以使用此帮助器方法初始化交错数组:

    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]);
    
        4
  •  0
  •   John Rayner    13 年前

    您可以使用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());
    }