vb.net: индекс в “для каждого”

Когда-то в VB.net у меня есть что-то как:

For Each El in Collection
   Write(El)
Next

Но если мне нужен индекс, я должен изменить его на

For I = 0 To Collection.Count() - 1
   Write(I & " = " & Collection(I))
Next

Или еще (хуже)

I = 0
For Each El In Collection
   Write(I & " = " & El)
   I += 1
Next

Есть ли другой способ получить индекс?

18
задан Jim Counts 25 February 2010 в 02:24
поделиться

2 ответа

Ответ Python в стиле xkcd - короче текущего!

print [4]*100

Реальный ответ, 63 символа:

from random import*;print sorted(randrange(9e9)for i in[0]*100)
-121--1632024-

Это зависит от стандарта кодирования компании. Но большинство программистов используют camelCose или подчеркивание + camelCosure on Fields и PascalCose on Properties, например:

public class Foo    
{         
    protected string _bar; 

    public string Bar         
    {             
        get { return _bar; }         
    }     
} 
-121--4154797-

Если используется общая коллекция (Collection (of T)), то можно использовать метод IndexOf .

For Each El in Collection
   Write(Collection.IndexOf(El) & " = " & El)
Next
24
ответ дан 30 November 2019 в 07:23
поделиться

Если вам нужен индекс, то цикл for является наиболее простым вариантом и имеет высокую производительность. Помимо упомянутых вами альтернатив, вы можете использовать перегруженный метод Select для отслеживания индексов и продолжать использовать цикл foreach.

Dim list = Enumerable.Range(1, 10).Reverse() ''# sample list
Dim query = list.Select(Function(item, index) _
                           New With { .Index = index, .Item = item })
For Each obj In query
    Console.WriteLine("Index: {0} -- Item: {1}", obj.Index, obj.Item)
Next

Однако я бы придерживался цикла for, если единственной причиной является итерация и знание индекса. Выше не ясно, почему вы решили пропустить цикл for.

4
ответ дан 30 November 2019 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: