找到一个键的索引?字典.NET

找到一个键的索引?字典.NET,.net,linq,.net,Linq,我需要做currentKey+1。所以我想找到键值的索引,然后得到下一个键(如果在末尾,则是第一个键)。如何找到键的当前索引 我正在使用词典并查找。使用Linq查找或索引无效。词典没有排序,因此键实际上没有任何索引。请看我的问题: 使用具有 编辑:“我不确定我是否理解你想要什么。如果你想遍历字典,只需使用 foreach(KeyValuePair kvp in yourDict) 如果键是Int,并且您想要下一个,请使用 var newkey = oldkey+1; if(yourdict.C

我需要做currentKey+1。所以我想找到键值的索引,然后得到下一个键(如果在末尾,则是第一个键)。如何找到键的当前索引


我正在使用
词典
并查找。使用Linq查找或索引无效。

词典没有排序,因此键实际上没有任何索引。请看我的问题:

使用具有

编辑:“我不确定我是否理解你想要什么。如果你想遍历字典,只需使用

foreach(KeyValuePair kvp in yourDict)
如果键是Int,并且您想要下一个,请使用

var newkey = oldkey+1;
if(yourdict.ContainsKey(newkey)){
    var newvalue = yourdict[newkey];
}
如果整数不是连续的,可以使用

var upperBound = d.Max(kvp => kvp.Key)+1; // to prevent infinite loops
while(!yourdict.ContainsKey(newkey) && newkey < upperBound) {
    newkey++;
}

正如Michael Stum指出的,
字典
没有排序(它是一个哈希表),因此没有键的“索引”这样的东西。相反,您可以使用它(顾名思义)进行排序并提供方法


请注意,
Dictionary
的性能特征不同于
SortedList
。对于插入和删除,字典是O(1),而SortedList是O(logn)

如果不使用其他集合,可以这样做。虽然我不确定这有多有效

classIndex = classes.ToList().IndexOf(new KeyValuePair<int, classname>(newKey, classes[newKey]));
classIndex=classes.ToList().IndexOf(newkeyvaluepair(newKey,classes[newKey]);

或一个有序的字典:@mwilson非常正确,我已经更改了我的答案<代码>队列听起来真的很蠢:)嗯,在我每次调用它的函数中,我应该把键复制到一个列表中,对它排序,然后使用prev/next吗?(我仍然可以通过扫描值来找到当前索引)我不需要它们被添加的顺序,我需要
var keys=(从您dict.keys中的key orderby key select key)接受的key value的顺序。ToList()答案。我赞成的解决办法。当我试图在没有仔细阅读你的文章的情况下写它时,我弄错了。我写错了医嘱。钥匙[钥匙]。Yikes(哎哟,抛出了一个很好的异常,但我感到困惑)或classIndex=classes.Keys.ToList().IndexOf(newKey)
classIndex = classes.ToList().IndexOf(new KeyValuePair<int, classname>(newKey, classes[newKey]));