问题描述
我已经尝试将 for
循环与 Dictionary
一起使用,但无法真正实现我想要的.
I have tried my hand using for
loop with Dictionary
but couldn't really achieve what I want to.
我有一个特定的变量 SomeVariable
并且在这个变量的值上我希望我的 foreach
工作.SomeVariable
可以是 1,2,3 或 4
I have a certain variable SomeVariable
and on the value of this variable I want my foreach
to work. SomeVariable
can be 1,2,3 or 4
所以假设 SomeVariable
是 1
我想从前 3 个索引(0,1,2) SomeCollection
里面.
So lets say SomeVariable
is 1
I want to retrieve the last item.value
from among the first 3 indexes(0,1,2) inside the SomeCollection
.
如果 SomeVariable
是 2
我想从接下来的 3 个索引(3,4,5) 在 SomeCollection
中.
And if SomeVariable
is 2
I want to retrieve the last item.value
from among the next 3 indexes(3,4,5) inside the SomeCollection
.
等等……
For Each item As KeyValuePair(Of String, Integer) In SomeCollection
If SomeVariable = 1 Then
//....
ElseIf SwitchCount = 2 Then
//....
End If
Next
推荐答案
字典没有定义的顺序,因此您感知的任何顺序都是暂时的.来自 MSDN:
A dictionary has no defined order, so any order you perceive is transient. From MSDN:
.KeyCollection 中键的顺序未指定,但与 Values 属性返回的 .ValueCollection 中的关联值的顺序相同.
尝试使用 Keys 集合来确定顺序显示它是如何瞬态的:
Trying to use the Keys collection to determine the order shows how it is transient:
Dim myDict As New Dictionary(Of Integer, String)
For n As Int32 = 0 To 8
myDict.Add(n, "foo")
Next
For n As Int32 = 0 To myDict.Keys.Count - 1
Console.WriteLine(myDict.Keys(n).ToString)
Next
输出按顺序打印 0 - 8,如您所料.然后:
the output prints 0 - 8, in order, as you might expect. then:
myDict.Remove(5)
myDict.Add(9, "bar")
For n As Int32 = 0 To myDict.Keys.Count - 1
Console.WriteLine(myDict.Keys(n).ToString)
Next
输出为:0, 1, 2, 3, 4, 9 (!), 6, 7, 8
The output is: 0, 1, 2, 3, 4, 9 (!), 6, 7, 8
如您所见,它重用了旧插槽.任何依赖于某个位置的东西的代码最终都会崩溃.添加/删除的越多,它就越无序.如果您需要对 Dictionary
进行排序,请改用 SortedDictionary
.
As you can see, it reuses old slots. Any code depending on things to be in a certain location will eventually break. The more you add/remove, the more unordered it gets. If you need an order to the Dictionary
use SortedDictionary
instead.
这篇关于For Each Dictionary 按索引顺序循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!