2017-05-20 4 views
-1

다음 코드를 들쭉날쭉 한 배열로 업데이트하려고하는 콘솔 앱이 있습니다. 들쭉날쭉 한 키워드 등을 사용해야합니까?C# 콘솔 응용 프로그램의 다차원 배열에서 들쭉날쭉 한 배열로 변환 하시겠습니까?

float[, ] tempsGrid = new float[4, 3]; 

     for (int x = 0; x < 4; x++) 
     { 
      for (int y = 0; y < 3; y++) 
      { 
       tempsGrid[x, y] = x + 10 * y; 
      } 
     } 

     for (int x = 0; x < 4; x++) 
     { 
      for (int y = 0; y < 3; y++) 
      { 
       Console.Write(tempsGrid[x, y] + ", "); 
      } 
      Console.WriteLine(); 
     } 

답변

0

내가 잘못 될 수도 있지만 내가 제대로 질문을 이해한다면, 당신은 싶었은 가변 배열로 다차원 배열을 변환합니다. 나는 개인적으로, Linq에의 도움으로 배열을 생성 선호

public static T[][] ConvertToJagged<T>(T[,] multiArray) 
{ 
    var fin = new T[multiArray.GetLength(0)][]; 
    for (var i = 0; i < multiArray.GetLength(0); i++) 
    { 
     fin[i] = new T[multiArray.GetLength(1)]; 
     for (var j = 0; j < multiArray.GetLength(1); j++) 
      fin[i][j] = multiArray[i, j]; 
    } 
    return fin; 
} 
0

:이 작업을 수행하는 미리 정의 된 방법이 없습니다, 당신은 단순히 가변 배열로 다중 배열에서 값을 복사해야

using System.Linq; 

    ... 

    float[][] tempsGrid = Enumerable 
    .Range(0, 3) 
    .Select(y => Enumerable 
     .Range(0, 4) 
     .Select(x => x + 10.0f * y) 
     .ToArray()) 
    .ToArray(); 

    Console.Write(string.Join(Environment.NewLine, tempsGrid 
    .Select(line => string.Join(", ", line)))); 

그러나이 방법은 너무 복잡 할 수 있습니다. 좋은 오래 된 for 루프 솔루션 :

int height = 4; 
    int width = 3; 

    float[][] tempsGrid = new float[height][]; 

    // I suggest reversing the logic: line - y - 1st index; column - x - 2nd index 
    for (int y = 0; y < tempsGrid.Length; ++y) { 
    tempsGrid[y] = new float[width]; 

    for (int x = 0; x < tempsGrid[y].Length; ++x) 
     tempsGrid[y][x] = x + 10 * y; 
    } 

    for (int y = 0; y < tempsGrid.Length; ++y) { 
    for (int x = 0; x < tempsGrid[y].Length; ++x) 
     Console.Write(tempsGrid[y][x] + ", "); 

    Console.WriteLine(); 
    } 
관련 문제