나는 Dictionary<Guid, ElementViewModel>
입니다. (ElementViewModel은 우리 고유의 복합 유형입니다.) items.Add(Guid.NewGuid, new ElementViewModel() { /*setters go here*/ });
,사전에있는 항목의 순서를 추적하는 방법이 있습니까?
나중에 항목의 일부 또는 전부를 제거합니다.
내 ElementViewModel의 단순한보기는 이것이다 :
class ElementViewModel
{
Guid Id { get; set; }
string Name { get; set; }
int SequenceNo { get; set; }
}
그것은 SequenceNos 이동 및 복사가 발생한 같은 경우, 추가 한 후 컬렉션에서 다른 작업을 압축 것을 언급 중요 할 수 있습니다. {1, 5, 6} -> {1, 2, 3}
는내 제거 동작의 간단한 도면이다
가public void RemoveElementViewModel(IEnumerable<ElementViewModel> elementsToDelete)
{
foreach (var elementViewModel in elementsToDelete)
items.Remove(elementViewModel.Id);
CompactSequenceNumbers();
}
I는 예시의 문제점을 설명 할 것이다 :
나는 사전에 3 개 항목을 추가 :
var newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 1, Name = "Element 1" });
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 2, Name = "Element 2" });
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 3, Name = "Element 3" });
나는이 개 항목을 제거
,RemoveElementViewModel(new List<ElementViewModel> { item2, item3 }); //imagine I had them cached somewhere.
는 지금은 2 개 다른 항목을 추가 할 : 나는 "요소 1", "요소 2, 2 부 될 항목의 순서를 예상이 시점에서 사전의 평가에
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 2, Name = "Element 2, Part 2" });
newGuid = Guid.NewGuid();
items.Add(newGuid, new MineLayoutElementViewModel { Id = newGuid, SequenceNo = 3, Name = "Element 3, Part 2" });
","요소 3, 2 부 "
있지만 다음과 같은 순서로 실제로 : ", 요소 1 ","요소 3, 2 부 ","요소 2 제 2 부 "
,
나는 이러한 항목의 순서에 따라 결정됩니다. 왜 그것이 예상대로 아니며 어떻게해야합니까?
예, 북마크를 가져옵니다. :) –