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