将2D float数组转换为1D字符串数组

时间:2014-02-14 04:17:50

标签: c# arrays string

我有一个二维浮点数组,我想将它转换为一维字符串数组,其中每个字符串是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 = " ";
}

3 个答案:

答案 0 :(得分:4)

在你的内部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

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

答案 2 :(得分:1)

您在嵌套value循环中的每次迭代中重新分配for。请改用+=运算符。你要考虑的另一件事是使用StringBuilder如果要重复追加字符串。 string是不可变的,因此每次附加到string时都会创建一个新的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) + ","));

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

{{1}}