我有一个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();
}
我将说明用一个例子的问题:
我加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" });
我删除了2项
RemoveElementViewModel(new List<ElementViewModel> { item2, item3 }); //imagine I had them cached somewhere.
现在我想添加其他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" });
在此时词典的评价,我预计项目为了 “元件1”,“元素2,第2部分”, “元素3,第2部分”
但它实际上是按以下顺序: “元件1”, “元素3,第2部分”, “元件2,第2部分”
我依靠这些项目的顺序是一定的方式。为什么它不如预期,我能做些什么呢?
当然,得到一些书签:) – 2010-03-03 16:19:39