2011-03-21 9 views
0

저는 C#을 사용하고 있습니다. 저는이 언어에 익숙하지 않지만 비슷한 구문을 사용하여 기본 구문을 이해했습니다.2D 배열의 요소 교체 C#

나는 Object 타입의 2D 배열을 가지고 있습니다. (X는 어떤 값을 나타내고 Y은 무엇 기록이다) 그것은 두 개의 열이 0과 1의 문자열과 3

2의 MessageBoxIconMessageBoxButtons 나는 두 개의 레코드를 교환 할 수있는 기능을 싶습니다를 저장합니다.

배열을 변경할 때마다 listBox를 열 1로 채 웁니다. (루프 사용)이 시스템에 만족합니다. listBox의 측면에 + 및 - 버튼을 배치했지만 그 뒤에 코드를 수행하는 방법을 알 수 없습니다.

+ 버튼을 클릭하면 현재 선택된 레코드가 하나의 레코드 위로 올라가도록합니다. (I.E. Y 위치가 감소하고 위의 레코드의 Y 좌표가 증가합니다.) 해당 레코드와 관련된 모든 값을 범프해야합니다.

누군가이 기능을 제공 할 수 있습니까?

나는 이것을 충분히 설명하기를 희망한다. 이 한 번에 하나 개의 요소를 수행해야하는 2 차원 배열의 a와 b 인 행으로,

var t = a; 
a = b; 
b = t; 

을하지만 :

+0

배열은 object [] [] 또는'object [,]'입니까? – Gabe

+0

배열에서 멀리 이동 C# (및 다른 언어)에는 많은 컬렉션 클래스가 있으므로 List 은이 상황에서 좋은 선택입니다. 이 클래스에는 여러 가지 메소드가 빌드되고 테스트되어 있습니다. 이렇게 많은 사용자 지정 방법을 쓸 필요가 없다는 것을 의미합니다 ... – Adrian

답변

1

이 두 변수의 값을 교환하기위한 기존의 방법으로 수행해야합니다.

public void Swap2DRows(Array a, int indexOne, int indexTwo) { 
    if (a == null} { throw new ArgumentNullException("a"); } 
    if (a.Rank != 2) { throw new InvalidOperationException("..."); } 

    // Only support zero based: 
    if (a.GetLowerBound(0) != 0) { throw new InvalidOperationException("..."); } 
    if (a.GetLowerBound(1) != 0) { throw new InvalidOperationException("..."); } 

    if (indexOne >= a.GetUpperBound(0)) { throw new InvalidOperationException("..."); } 
    if (indexTwo >= a.GetUpperBound(0)) { throw new InvalidOperationException("..."); } 

    for (int i = 0; i <= a.GetUpperBound(1); ++i) { 
    var t = a[indexOne, i]; 
    a[indexOne, i] = a[indexTwo, i]; 
    a[indexTwo, i] = t; 
    } 
} 

는 임의의 하한을 처리하기 위해 일반화 될 수있다.

+0

감사합니다 힙 !!!! 내 뇌가 완전히 얼어 붙었다. 내 기준을 약간 변경했기 때문에 배열은 문자열을 처리해야만했습니다. 그런 다음 똑같은 작업을 이미 수행했기 때문에 모든 데이터 삭제 작업을 삭제했지만 최종 결과는 여기에 있습니다. – YoshieMaster

+0

' 공개 무효 Swap2DRows (문자열 []는, INT indexOne, INT indexTwo) {위한 는 INT (I = 0; I <= a.GetUpperBound (0); ++ I) { VAR의 t = A [i, indexOne]; a [i, indexOne] = a [i, indexTwo]; a [i, indexTwo] = t; } } ' – YoshieMaster

+0

젠장, 코드 태그를 작동시킬 수 없습니다. – YoshieMaster