2013-11-21 3 views
1

2 차원 배열을 인수로 취하는 메서드가 있습니다.배열을 길이가 1 인 2 차원 배열에 복사하십시오.

object[,] flatArray = new object[N,1]; 

내가로 처리 할 1 차원 배열을 가지고

void Process(object[,] array) 
{ 
    // do something 
} 
이 방법은 또한 같은 변수 예 : 하나의 '로우'가 2 차원 배열에 사용될 수

2 차원 배열. 내가 얻을 수있는 최선의 해결책은 다음과 같습니다.

private object[,] Make2D(object[] array) 
{ 
    object[,] result = new object[array.Length, 1]; 
    for(int i = 0; i < array.Length; i++) 
    { 
     result[i, 0] = items[i]; 
    } 
    return result; 
} 

더 효율적이고 똑똑한 방법이 있습니까?

+0

새 배열을 만드는 대신 열거 형을 변경할 수 있습니다. 이 같은 비트 : http://stackoverflow.com/questions/10554866/how-do-you-transpose-dimensions-in-a-2d-collection-using-linq – Kaido

답변

1

내가 코드에 문제가 표시되지 않습니다

여기
private T[,] Make2D<T>(T[] array) 
{ 
    T[,] result = new T[array.Length, 1]; 
    for (int i = 0; i < array.Length; i++) 
    { 
     result[i, 0] = array[i]; 
    } 
    return result; 
} 

당신이 그것을 사용하는 방법입니다 .

C#의 다차원 배열을 좋아하지 않습니다. 작업하기가 어렵습니다. 프레임 워크에서 도구와 함께 사용할 수있는 도구가 부족합니다. 예 : Array.Resize을 다차원 배열과 함께 사용할 수 없습니다.

단일 차원 배열의 인덱스를 계산하고 다차원 배열을 사용하는 것보다 다차원 배열을 시뮬레이트하는 것을 선호합니다. 이렇게하면 배열 변환이 필요없이 자유롭게 배열을 작업 할 수 있습니다.

1

내가 나중에지지 않도록 제네릭을 사용할 것을 조언합니다 :

int[] example = new int[15]; 
//insert data to example 
Make2D<int>(example); 
+0

힌트를 주셔서 감사하지만 배열을 사용하고 있습니다. 그래서 개체가 나를 위해 잘됩니다. 그러나 이것은 다른 사람에게 도움이 될 수 있습니다. – helb

0
public static class Program 
{ 
    static void Main(string[] args) 
    { 

     var test = new[] {1, 2, 3}.To2D(); 
    } 

    public static T[,] To2D<T>(this T[] array) 
    { 
     if (array == null) throw new ArgumentNullException("array"); 

     var i = 0; 
     var res = new T[array.Length, 1]; 

     Array.ForEach(array, o => res[i++, 0] = o); 

     return res; 
    } 
} 
관련 문제