C#Dictionary添加错误顺序的条目

时间:2014-06-14 19:12:37

标签: c# windows-phone-8 dictionary

我在RoutingList中添加了一个新项目,但在第一次删除后,订单错误。

public Dictionary<int, Route> RoutingList = new Dictionary<int, Route>();

例如:

1,路线
2,路线
3,路线
4,路线
5,路线

现在我删除了第一个。

2,路线
3,路线
4,路线
5,路线

通过添加下一个项目,我得到了这个列表:

6,路线
2,路线
3,路线
4,路线
5,路线

在此之后,第一个(6)将被删除。但这是错误的。我想删除第2号。

为什么?

int key = RoutingList.LastOrDefault().Key;
RoutingList.Add(key + 1, tmpRoute);

if (RoutingList.Count == 5)
{
    RoutingList.Remove(RoutingList.First().Key);
}

3 个答案:

答案 0 :(得分:4)

标准字典的顺序不是默认保持项目顺序。如果您想保留订单并保持快速查询,则需要使用OrderedDictionary

或者,如果您不需要快速查找,或者您的密钥始终是您的索引(看起来可能是这样),只需查看使用列表,该列表将被订购:

List<Route> routes;
Route route = routes[key];

答案 1 :(得分:1)

您不能依赖字典中的项目顺序。如果你需要删除id最低的条目,那么OrderedDictionary的替代方案就是更改你的查询(我不是100%肯定会编译,因为我现在没有VS可用,但你明白了) :

if (RoutingList.Count == 5)
{
    RoutingList.Remove(RoutingList.Keys.Min());
}

答案 2 :(得分:1)

根据MSDN

  

Dictionary的容量是Dictionary可容纳的元素数。当元素添加到Dictionary时,通过重新分配内部数组,容量会根据需要自动增加。

这听起来像是ArrayList的行为,其中不维护订单。从字典中删除项目时,内部数组的大小不会减小。因此,索引将在您删除的项目处保持打开状态,直到添加下一个项目进入该空索引。