2011-12-21 7 views
1

항목을 다른 행으로 끌어서 놓거나 위로 또는 아래로 화살표를 클릭하여 목록 위로 또는 목록 아래로 항목을 이동합니다.항목 조율 변경을위한 사용자 지정 정렬 알고리즘

+0

'Item.Remove (currentPosition) then Item.Insert (NewPosition)'내 생각 엔 ... –

+0

구체적인 예를 들어보세요. 당신이 묻고있는 것 ... – Tigran

+0

여기 가야 할게 많지는 않습니다 ... doesn UI가 무엇인지 언급하지 않습니다. 항목을 목록에서 쉽게 이동할 수 있습니다. –

답변

0

음을 수행하기위한 선호하는 알고리즘 또는 패턴을 정렬하는 대신, 그것은 무엇 정렬 된 목록에서 한입니까?

List<string> l = new List<string>() {"one", "five", "two", "three", "four", "six"}; 

이 항목 1 ("five") ("six" 전) 지수 5로 이동하려면 :

는 항목의 목록을 말해봐?

l.Insert(5, l[1]); 
l.RemoveAt(1); 

어떤 종류의 디스플레이에도 적응하기가 어렵지 않습니다.

+0

향후 사용자를위한 참고 사항 : 데이터 구조가 동일한 객체가 두 번 존재하도록 허용하지 않는 경우 (많은 UI 구조 [인스턴스의 경우 ListView.Items]와 마찬가지로) 데이터 구조가 올바르게 허용되지 않으면이 작업이 수행되지 않습니다 원래 항목의 순서가 변경 될 때 항목을 위로 이동 * 목록을 이동합니다. 원본을 원한다면 'temp'값을 삽입하고 개체 ID, * 다음 * 삽입 및 마지막으로 임시 값 제거로 원하는 값을 삽입하십시오. – Crisfole

+0

@Cpfohl :이 경우 제거 및 삽입 작업을 바꾸면됩니다. – Ryan

+0

사실,하지만 (예를 들어) ListViewItem을 추가하고 제거하면 같은 항목을 두 번 추가하는 제한 때문에 여전히 작동하지 않습니다. 나는 당신의 방법이 옳지 않다는 것을 제안하려고하지 않고, 미래에이 페이지에 도달하는 사람들에게 손을 뻗어 보려고 노력했습니다. – Crisfole

0

일반적으로 List <> .RemoveAt(), List <> .Insert()로 처리 할 수 ​​있습니다.

0

나는 이동 자체를 구현하는 방법뿐만 아니라 목록의 가까운 항목과 어떻게해야할지에 대해서도 의문이 있다고 생각합니다.

목록이 주문 된 경우 모든 항목은 목록에 고유 번호가 있어야합니다.

까지 : 그래서 일반적인 알고리즘은 다음은 1. 기억

int id = items[number - 1]; //number is the number of the selected item 
  1. 같은 선택한 항목의 수를 이전 항목의 ID를 기억

    INT NUM = CURRENT_ITEM .번호;

  2. current_item.number--;

  3. 변경 이전 항목의 수 : 이드하여 얻을 :

    이전 context.where = (I => i.id == ID)

    ,

다음 prev.number = num 변경

아래로 이동하는 경우에도 같지만 숫자를 늘려야합니다.

또는 ID없이 목록을 사용하면 이전 항목의 값을 임시 변수 (또는 번호)에 유지해야합니다.