C# 在字典的开头插入项

C# 在字典的开头插入项,c#,asp.net-mvc,asp.net-mvc-partialview,C#,Asp.net Mvc,Asp.net Mvc Partialview,我正在使用字典填充视图中的选择框。所有这些都正常工作。但是,我需要在字典的开头添加一个额外的选项,作为对用户的提示,其值为-1 我有以下代码 Dictionary<int, string> acctMgr = new Dictionary<int, string>(); acctMgr = db.Users.Where(u => u.Title.Contains("Account Manager") || u.Title.Contains("Client Servi

我正在使用字典填充视图中的选择框。所有这些都正常工作。但是,我需要在字典的开头添加一个额外的选项,作为对用户的提示,其值为-1

我有以下代码

Dictionary<int, string> acctMgr = new Dictionary<int, string>();
acctMgr = db.Users.Where(u => u.Title.Contains("Account Manager") || u.Title.Contains("Client Services Manager")).ToDictionary(v => v.ApplicationUserId, v => v.FullName);
…但这会将其添加到列表的末尾(我不相信字典可以排序)。在那之后,我尝试在变量声明之后添加上面的行,但是它被db.Users替换了。。。线路


思想?

字典不是有序的——它们实际上是一个提供O(1)直接查找的哈希表结构。因此,您对有序集合使用了错误的数据结构。您最好使用
列表
,因为该列表将尊重项的添加/插入顺序。

字典没有顺序-它们实际上是一个提供O(1)直接查找的哈希表结构。因此,您对有序集合使用了错误的数据结构。您最好使用
列表
,因为列表将遵循项目添加/插入的顺序。

我建议手动将“选择一个”项目添加到控件本身。如果需要选择框,这将更容易确定是否进行了真正的选择


但是,如果设置向某种类型的字典添加项,则可以创建自己的扩展方法,其签名与当前使用的
ToDictionary
方法相同,但返回
SortedDictionary

我建议手动将“Choose one”项添加到控件本身。如果需要选择框,这将更容易确定是否进行了真正的选择


但是,如果您打算将某个项添加到某种类型的词典中,您可以创建自己的扩展方法,其签名与当前使用的
ToDictionary
方法相同,但返回一个
SortedDictionary

词典本身没有排序。您使用的集合不正确。如果你真的想用字典的话,试试看。我觉得这不是解决你问题的好方法。如果您想详细说明您要完成的任务,我们可能可以为您提供指导。使用
SortedDictionary
SortedList
在填充选择框之前,您可以在选择框中添加“Choose One”吗?字典本身不需要订购。您使用的集合不正确。如果你真的想用字典的话,试试看。我觉得这不是解决你问题的好方法。如果您想详细说明您要完成的任务,我们可能可以为您提供指导。使用
SortedDictionary
SortedList
在填充选择框之前,您可以在选择框中添加“Choose One”吗?这在Trevor的情况下不起作用。他在后面添加了
-1
,并将位于列表底部。列表支持
插入(int index,T item)
,允许您在任何索引处插入。更多:排序列表将提供O(logn)检索,但O(n)插入。这是因为它必须将插入后的所有元素向下移动到下一个位置,这需要O(n)个时间(移动的元素平均数量为n/2)。也就是说,在这种情况下,这并不重要,因为正如目前所述,剩余的元素不需要排序,因此这将是一个单独的O(n)操作,而保持排序列表将有
n
O(log n)操作。@Cemafor我刚才看了一下,SortedList确实是使用数组实现的。真的以为是用AVL/RBT。那么在这种情况下,插入肯定是O(n)+1.@SimonBelanger:我在评论中指的是一个需要排序的列表(并使用二进制搜索/插入),但我想它也适用于实际的排序列表。:)这对特雷弗的案子不起作用。他在后面添加了
-1
,并将位于列表底部。列表支持
插入(int index,T item)
,允许您在任何索引处插入。更多:排序列表将提供O(logn)检索,但O(n)插入。这是因为它必须将插入后的所有元素向下移动到下一个位置,这需要O(n)个时间(移动的元素平均数量为n/2)。也就是说,在这种情况下,这并不重要,因为正如目前所述,剩余的元素不需要排序,因此这将是一个单独的O(n)操作,而保持排序列表将有
n
O(log n)操作。@Cemafor我刚才看了一下,SortedList确实是使用数组实现的。真的以为是用AVL/RBT。那么在这种情况下,插入肯定是O(n)+1.@SimonBelanger:我在评论中指的是一个需要排序的列表(并使用二进制搜索/插入),但我想它也适用于实际的排序列表。:)
acctMgr.Add(-1, "Choose one");