C# 字典中的下一个键
如何使用 key 获取 -Sorted- 字典中项目的 Enumerator
?
注意:GetEnumerator()
获取第一个元素的 Enumerator
。
但是我需要获取第一个元素的 Enumerator
具有给定键的元素,以便使用 MoveNext()
访问下一个元素,例如...
编辑: 或者访问下一个元素的方法...
编辑:我更喜欢 const time 方法...
谢谢
How to get an Enumerator
to an item in a -Sorted- dictionary using key?
Note:GetEnumerator()
gets an Enumerator
to first element..
But I need to get an Enumerator
to the element with a given key in order to gain access to next elements using MoveNext()
for example...
Edit: Or a way to access next elements...
Edit: I prefer a const time method...
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
其中 myKey 是您要查找的密钥。如果你想对键进行排序,你可以使用 OrderBy 扩展方法。
编辑:您无法使用 Dictionary/SortedDictionary 进行常量编辑。为什么不实现你自己的二叉搜索树(就像 SortedDictionary 一样)并且你将有 O(log n) 时间查找和 O(1) 时间
.next()
?Where myKey is the key you're looking for. And you can use the OrderBy extension method if you want to have the keys sorted.
Edit: You can't do it in constant with Dictionary/SortedDictionary. Why not implement your own binary search tree (like SortedDictionary is) and you will have O(log n) time lookup and O(1) time
.next()
?也许这对某人有用:
Maybe this is useful to somebody:
您无法使用字典来做到这一点。
您可以通过索引访问来实现这一点,因此您可以使用 SortedList 而不是字典。您还可以查看 SkipWhile。
虽然你可以有一些像这样的解决方法:
但这当然不是最好的主意。
You can't do that with Dictionary.
You can accomplish that having possibility of accessing by index, so you can use SortedList instead of Dictionary. Also you can have a look at SkipWhile.
Although you can have some workaround like this :
But of course this is not the best idea.
如果您安装了 Framework >=3.5,请使用 SkipWhile Janus Tondering 和卢克建议道。
对于较低的框架版本,您必须自己执行此操作(可以使用从键到末尾的键值对填充第二个字典)。
If you have Framework >=3.5 installed use SkipWhile Janus Tondering and LukeH suggested.
For lower framework versions you have to do it for yourself(f.e. fill a second dictionary with the keyvaluepairs from your key to the end).
最简单的选择是使用
SortedList
,然后向其中添加一个扩展方法,该方法返回一个IEnumerable
,其元素大于或等于给定键。下面的GetElementsGreaterThanOrEqual
方法获取第一个元素的复杂度为 O(log(n)),之后的每次迭代的复杂度为 O(1)。The easiest option is to use a
SortedList
and then add an extension method to it that returns anIEnumerable
whose elements are greater than or equal to the given key. The complexity of theGetElementsGreaterThanOrEqual
method below is O(log(n)) to get the first element and then each iteration after that is O(1).