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

时间:2008-10-15 19:02:54

标签: vb.net

我正在使用以下语法遍历列表集合:

For Each PropertyActor As JCPropertyActor In MyProperty.PropertyActors

    i = IndexOf(PropertyActor)
Next

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

6 个答案:

答案 0 :(得分:12)

AFAIK因为这会将对象拉出集合,你必须回到集合才能找到它。

如果您需要索引,而不是为每个循环使用a,我只会使用遍历索引的for循环,以便您知道自己拥有的内容。

答案 1 :(得分:12)

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

for (int i=0;i<MyProperty.PropertyActors.Length;i++)
{
    //...
}

答案 2 :(得分:6)

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

i = 0
For Each PropertyActor As JCPropertyActor In MyProperty.PropertyActors
    ...
    i = i + 1
Next

顺便说一下,Python有一种方便的方法:

for i, x in enumerate(a):
    print "object at index ", i, " is ", x

答案 3 :(得分:2)

在进入循环之前初始化一个整数变量并迭代它......

Dim i as Integer 
For Each PropertyActor As JCPropertyActor In MyProperty.PropertyActors
    i++
Next

答案 4 :(得分:1)

添加一个你自己为每次迭代增加的索引变量吗?

答案 5 :(得分:1)

您可以使用“FindIndex”方法。

MyProperty.PropertyActors.FindIndex(Function(propActor As JCPropertyActor) propActor  = JCPropertyActor)

但是对于每个循环来说,似乎有很多额外的开销,并且看起来像“IndexOf”方法一样产生问题。我建议使用旧式的索引迭代。通过这种方式,您可以获得索引和项目。

Dim PropertyActor As JCPropertyActor
For i As Integer = 0 To MyProperty.PropertyActors.Count - 1
    PropertyActor = MyProperty.PropertyActors.Item(i)
Next