2014-02-14 3 views
0

У меня есть 2D массив поплавков, и я хочу преобразовать его в 1D массив строк, где каждая строка является одной строкой элементов из 2D-массива. Я не получаю вывод в текстовом файле, как я ожидал. Может ли кто-нибудь сказать мне, что я делаю неправильно? Это будет большой помощью для меня, если кто-то может предоставить эффективный код с исправлениями.Преобразование 2D-массива float в 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

Вы переустанавливаете value на каждой итерации в своем вложенном цикле for. Вместо этого используйте оператор +=. Еще одна вещь, которую вы должны рассмотреть, это использование StringBuilder, если вы собираетесь многократно присоединяться к строке. string s неизменяемы, поэтому вы каждый раз добавляете к нему новый string.

Не уверен, что это относится к вашему случаю (из-за границ в ваших циклах), но вы можете использовать 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

Смежные вопросы