【问题标题】:Convert 2D float array into 1D array of strings将二维浮点数组转换为一维字符串数组
【发布时间】:2014-02-14 13:03:54
【问题描述】:

我有一个 2D 浮点数组,我想将其转换为 1D 字符串数组,其中每个字符串是 2D 数组中的一行元素。我没有像预期的那样在文本文件中得到输出。谁能告诉我我做错了什么?如果有人可以提供有效的代码并进行更正,这将对我有很大帮助。

string[] set = new string[240];

string value = "@"

for (int i = 0; i < 240; i++)
{
    for (int j = 0; j < 320; j++)
    {
        value = Convert.ToString(ImageArray[i, j]);
        value += ",";
    }

    set[i] = value + Environment.NewLine;
    value = " ";
}

for(int k=0;k<240;k++)
{
    System.IO.File.AppendAllText(@"C:\Users\mtech\Desktop\sathya.txt", set[k]);
    textBlock1.Text = set[k];
    value = " ";
}

【问题讨论】:

    标签: c# arrays string


    【解决方案1】:

    在您的内部 for 循环 (j) 中,您正在覆盖 value 变量的值。

    for (int j = 0; j < 320; j++)
        {
            value = Convert.ToString(ImageArray[i, j]);
            value += ",";
        }
    

    你应该这样做:

    for (int j = 0; j < 320; j++)
        {
            value += Convert.ToString(ImageArray[i, j]) +",";
        }
    

    另外,你不需要为这个任务执行两个嵌套循环,看看String.Join

    【讨论】:

    • 是的!贴出代码后我才意识到错误,非常感谢
    【解决方案2】:

    这是LINQ:的更短方式

    var allValues = ImageArray.OfType<float>();
    string[] lines = new string[240];
    for(int i=0; i<240; i++)
    {
       lines[i] = string.Join(",", allValues.Skip(i*320).Take(320));
    }
    
     File.AppendAllLines(@"C:\Users\mtech\Desktop\sathya.txt", lines);
    

    【讨论】:

      【解决方案3】:

      您在嵌套的for 循环的每次迭代中都重新分配value。请改用+= 运算符。您应该考虑的另一件事是使用StringBuilder,如果您要重复附加到字符串。 strings 是不可变的,因此您实际上是在每次附加到它时创建一个新的 string

      不确定这是否适用于您的情况(因为 for 循环中的边界),但您可以使用 LINQ 展平多维数组。示例:

      float[,] arr = new float[2,2]
      {
          {123.48F, 45.3F},
          {954.23F, 91.3F}
      };
      
      var str = string.Join("",
                    arr.Cast<float>()
                   .Select(x => Convert.ToString(x) + ","));
      

      【讨论】:

        猜你喜欢
        • 2016-07-09
        • 2019-01-23
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 2015-01-21
        相关资源
        最近更新 更多