我正在使用以下语法遍历列表集合:
For Each PropertyActor As JCPropertyActor In MyProperty.PropertyActors
i = IndexOf(PropertyActor)
Next
如何在循环中获取当前对象的索引?我正在使用IndexOf(PropertyActor)但这似乎效率低下,因为当我已经拥有该对象时它会搜索该集合!
答案 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