2014-02-14 127 views
0

我有一個浮點數的二維數組,我想將它轉換爲一維數組的字符串,其中每個字符串是來自二維數組的一行元素。我沒有按照我的預期在文本文件中獲得輸出。誰能告訴我我做錯了什麼?如果有人能夠提供更正的有效代碼,那對我來說會很有幫助。將2D浮點數組轉換爲1D字符串數組

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 = " "; 
} 

回答

4

裏面你內心的循環(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

+0

耶較短方式!!在發佈代碼後,我意識到了錯誤,非常感謝 – user3068954

1

您在嵌套for循環中的每次迭代中重新分配value。改爲使用+=運算符。你應該考慮的另一件事是使用StringBuilder如果你要反覆附加到一個字符串。 string s是不可變的,所以你實際上在每次追加時創建一個新的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) + ",")); 
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); 
+0

非常感謝 – user3068954