2016-06-08 3 views
0

항목 목록과 전체 목록의 하위 집합 인 "selected"목록이 있습니다. 하위 목록 항목을 전체 목록의 맨 아래로 이동하는 함수를 구현하려고합니다.List.Move를 사용하여 항목을 목록의 맨 아래로 이동

예를 들어, 요소 2,4, &을 목록 0,1,2,3,4,5,6,7,8,9에서 선택한 경우이 함수는 최종 결과를 원합니다. 0,1,3,5,7,8,9,2,4,6

현재는,이 같은 것을 사용하려고 해요,하지만 난 정의하는 방법을 잘 모르겠어요 moveTo :

public object MoveLoopToBottom() 
{ 
    if (selectedLoops.Count < 1) 
     return null; 

    foreach (ProfilerLoop selected in selectedLoops) 
    { 
     int moveFrom = ClonedLoops.IndexOf(selected); 
     int moveTo = ; 

     ClonedLoops.Move(moveFrom, moveTo); 
    } 

    return null; 
} 

List.Move의 작동 방식은 다음과 같습니다. Generic List - moving an item within the list 그러나 "목록의 끝으로 이동"할 수없는 것으로 보입니다. List.Move (최대)까지 "두 번째 - 마지막"위치로 이동할 수 있습니다 (목록의 끝으로 이동하려고하면 "OutOfRange Exception"이 발생 함).

대신 List.Move

, 내가 (다음 List.RemoveAt 또는 List.Add) List.Remove 다음 List.Add을하고 있지만 List.Remove를 호출 시도하는 것은 나에게 내 foreach 루프 반복의 문제를 제공합니다 ( List.Move하지 않는 경우).

제안 사항?

+1

는, 선택한 항목의 새 목록을 작성 원래 목록에서 그, 그럼 마지막에 추가 제거 (내 독특한 상황에 작동하지 않았다) – stuartd

+1

@stuartd'Except' 다음에'ToList()'를 추가합니다 ('List '에'AddRange' 메쏘드가 존재하기 때문에'var newList = originalList.Except (selectedItems) .AddRange (selectedItems) IEnumerable '). – Styxxy

+0

'list = list.OrderBy (i => selectedList.IndexOf (i))는 어떨까요? ToList();'? 'selectedList'에없는 항목은'IndexOf'가 -1이 될 것이고'selectedList'에 나타나는 순서대로 표시되기 때문에 다른 것들을 넣을 것입니다. – juharr

답변

0

사실,이 (그 이전에 작동하지 않는 이유를 잘 모르겠어요) 날 위해 일했습니다. @prospector의 대답은 아마도 매우 유효

public object MoveLoopToBottom() 
{ 
    if (selectedLoops.Count < 1) 
     return null; 

    foreach (ProfilerLoop selected in selectedLoops) 
    { 
     int moveFrom = PartLoops.IndexOf(selected); 

     ClonedLoops.Move(moveFrom, PartLoops.Count - 1); 
    } 

    return null; 
} 
2

올바르게 이해했다면 루프를 사용하지 않고 간단히 제거하고 읽을 수 있습니다.

List<int> list = new List<int>(new int[] { 0,1,2,3,4,5,6,7,8,9 }); 
var selected = new List<int>(new int[] { 0,1,2 }); 

list = list.Except(selected).ToList(); 
list.AddRange(selected); 

이 목록에서 선택한 모든 항목을 제거하고 그 하단에 다시 추가 할 수 있습니다.

DotNetFiddle

관련 문제