我有一個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