如何在For Each ... Next循环中获取对象的索引?

Sim*_*mon 7 vb.net

我使用以下语法循环列表集合:

For Each PropertyActor As JCPropertyActor In MyProperty.PropertyActors

    i = IndexOf(PropertyActor)
Next
Run Code Online (Sandbox Code Playgroud)

如何在循环中获取当前对象的索引?我正在使用IndexOf(PropertyActor)但这似乎效率低下,因为当我已经拥有该对象时它会搜索该集合!

Mit*_*ers 12

AFAIK因为它将对象拉出集合,你将不得不回到集合中找到它.

如果你需要索引,而不是为每个循环使用一个,我只会使用一个遍历索引的for循环,这样你就知道你拥有了什么.


Joe*_*orn 12

索引对IEnumerable没有任何意义,这是foreach构造使用的.这很重要,因为foreach如果您的特定集合类型以奇怪的方式实现IEnumerable,则可能无法按索引顺序枚举.如果你有一个可以通过索引访问的对象,并且你在迭代期间关心索引,那么你最好只使用传统的for循环:

for (int i=0;i<MyProperty.PropertyActors.Length;i++)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*ill 6

保持一个单独的计数器可能是最容易的:

i = 0
For Each PropertyActor As JCPropertyActor In MyProperty.PropertyActors
    ...
    i = i + 1
Next
Run Code Online (Sandbox Code Playgroud)

顺便说一句,Python有一个方便的方法:

for i, x in enumerate(a):
    print "object at index ", i, " is ", x
Run Code Online (Sandbox Code Playgroud)