2011-09-27 5 views
-3

나는 C#에서 2 차원 문자열 배열을 가지고 있고 나는 효율적인 방법으로C# 이동이 개 차원 배열 빠른 방법

내가가 중첩 사용을 원하는 해달라고 할 수있는 방법을 한 차원 에서 왼쪽으로 해당 배열을 이동해야하고 난 O의 algurithm을 원하는 (N)하지 O는 (N 2)

for (int i = 50; i < 300; i++) 
{ 
    for (int j = 0; j < 300; j++) 
    { 
     numbers[i-50, j] = numbers[i, j]; 
    } 
} 
+1

"해당 배열을 이동한다는 것은 무엇을 의미합니까? 왼쪽으로?" 지금까지 뭐 해봤 어? 당신은 효과가 있지만 연기력이없는 것을 가지고 있습니까? –

+0

은 중첩 된 상태로 작동합니다. –

+0

참고 당신이 게시 한 코드는'O (n)'입니다 (n은 배열의 요소 수입니다) – Justin

답변

2

많은 양의 데이터를 신속하게 이동하려면 개별 문자를 복사하는 루프가 아닌 Array.Copy을 사용하십시오.

바이트 배열로 바꾸고 Array.Copy 또는 Buffer.BlockCopy을 사용하면 성능을 조금 더 향상시킬 수 있습니다.하지만 문자 배열로 변환해야하는 경우에는 얻은 모든 것을 잃을 수 있습니다.

(편집 : 예제 코드를 게시 했으므로) : 배열 행에 대한 참조를 사용하면 데이터 자체를 이동하지 않고 참조를 이동할 수 있습니다. 어느 누구라도 Array.Copy를 사용하여 참조를 이동할 수 있습니다.

그러나 데이터를 이동할 필요가 없도록 접근 방식을 변경하면 성능을 향상시킬 수 있습니다. 그것을 항상 더 빨리 피하십시오! 데이터가 이동 된 양을 추적하는 접근 자 레이어에서 데이터를 래핑하고 이후의 데이터를 반환하기 위해 인덱스를 수정할 가능성이 있습니다. (이렇게하면 데이터에 대한 액세스 속도가 약간 느려지지만 데이터 이동이 줄어들 기 때문에 이동량에 따라 액세스 한 정도에 따라 순이익이 발생할 수 있습니다.

2

가장 효율적인 방법은 전혀 이동하지하는 대신 어레이에 액세스하는 방법을 변경합니다. 예를 들어 차원에서 첫 번째 열의 위치를 ​​알려주는 오프셋을 유지하십시오.