2013-07-24 4 views
5

C#에서는 double [] []과 double [,] 사이에 혼동을 느낍니다.
내 동료는 다음과 같이 나에게 기능을 제공 :C# : double [] [] and double [,]

double[,] data = survey.GetSurveyData(); //Get data 
double[,] inrma = Do_Something(data); 

그것은 오류를 이끌 :

public double[][] Do_Something(double[][] A) 
{ 
    ....... 
} 

나는이 기능을 사용하려면 유효하지 않은 인수를.
팀 동료의 코드를 수정하고 싶지 않습니다.
double[][]double [,]으로 변환 할 수있는 방법이 있습니까?

감사합니다.

+10

'double [] []'은 들쭉날쭉 한 배열입니다. 'double [,]'은 다차원 배열입니다. 그들은 분명히 같은 유형이 아니며 그들의 용도는 다소 다릅니다. 올바른 작업에 적합한 유형을 사용하십시오. –

+0

[왜 우리는 왜곡 된 배열과 다차원 배열을 가지고 있습니까?] (http://stackoverflow.com/questions/4648914/why-we-have-both-jagged-array-and-multidimentional-array)와 [What 다차원 배열과 C#의 배열 배열 사이의 차이점입니까?] (http://stackoverflow.com/questions/597720/what-is-differences-between-multidimensional-array-and-array-of-arrays-in-c) –

+0

당신이나 당신의 팀 동료가 그들 사이의 차이점에 대해 확신합니까? –

답변

8

double[][]double[,]은 다른 의미를 갖는다.

double[][]은 들쭉날쭉하므로 일부 요소는 다른 요소와 길이가 다를 수 있습니다.

double[,]은 "직사각형"이므로 모든 요소의 길이는 동일합니다.

둘 사이에 "변환"하는 방법을 쓸 수는 있지만 차이점을 어떻게 수정합니까? 나는. 긴 요소를 "트림"하거나 짧은 요소를 확장하여 사각형으로 만드는 방법은 무엇입니까?

9

double[][] 이중 [] (배열의 배열) 배열 하지만 double[,] 단일 2 차원 이중 어레이를이다

예 :

double[] Array1 = new double[] {1,2,3}; 
double[] Array2 = new double[] {4,5,6}; 
double[][] ArrayOfArrays = new double[][] {Array1,Array2}; 
double[,] MultidimensionalArray = new double[,] {{1,2}, {3,4}, {5,6}, {7,8}}; 
1
static T[,] Convert<T>(T[][] array) 
{ 
    if (array == null) 
     throw new ArgumentNullException("array"); 
    if (array.Length == 0) 
     return new T[0, 0]; 
    T[,] retval = new T[array.Length, array[0].Length]; 
    for (int i = 0; i < array.Length; i++) 
     for (int j = 0; j < array[i].Length; j++) 
      if (array[i].Length != retval.GetLength(1)) 
       throw new Exception(); 
      else 
       retval[i, j] = array[i][j]; 
    return retval; 
} 
+1

모든 입력에 대해 작업하기 위해 비틀 거린 지그재그 배열에서만 작동합니다. 'width = array.Max (a => a.Length)'를 사용하고 빈 슬롯을'default (T)'로 채울 수 있습니다. 체크인을하고 싶다면 레벨 밖으로 이동해야하므로 모든 셀이 아닌 행당 한 번만 선택됩니다. – RoadieRich

1

그들은 서로 다른 두 종류 배열의.

double[][]은 배열 배열 인 들쭉날쭉 한 배열입니다. 이들 어레이 각각은 상이한 길이를 가질 수 있으며, 이는 문제를 야기한다.

double[,]은 다차원 배열입니다. 각 행은 같은 수의 열을 가지며 각 열은 같은 수의 행을가집니다.

이 크기 차이는 톱니 모양의 배열이 실제로는 다른 행의 치수가 다를 수 있으므로 문제가됩니다. 가변 배열의 정확한 크기를 알고있는 경우 두 메서드간에 변환하는 메서드를 작성할 수 있지만이 경우 원래 메서드를 다시 작성하여 다차원 배열을 수락하고 반환하는 것이 좋습니다 (double[,]).