2014-02-14 3 views
0

플로트의 2D 배열을 가지고 있으며, 각 문자열이 2D 배열의 요소 한 행인 1D 배열의 문자열로 변환하고 싶습니다. 예상대로 텍스트 파일에 출력되지 않습니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 누군가가 효율적인 코드를 제공 할 수 있다면 큰 도움이 될 것입니다. 루프 (J)에 대한 당신의 내면의 내부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

, 당신은 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은 불변이므로 실제로 추가 할 때마다 새 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

관련 문제