Не удалось найти соответствующий вопрос.Есть ли эквивалент перечисления Python для .NET IEnumerable
В python
вы можете легко перебрать последовательность (list
, generator
и т.д.) и собирать индекс итерации в то же время благодаря enumerate(seq)
, как это:
>>> for (i,item) in enumerate(["toto","titi","tutu"]):
... print i, item
...
0 toto
1 titi
2 tutu
Есть ли что-то подобное для IEnumerable, который, например, преобразует IEnumerable<T>
в IEnumerable<Tuple<Int32,T>>
?
(я знаю, что это будет легко сделать благодаря правильной функции в Select()
.. но если он существует, то я предпочел бы использовать его :))
UPDATE FYI, мне интересно об этом вид возможности быть в состоянии сделать что-то вроде: «дайте мне индекс последнего элемента, который выполняет это условие», которое затем будет достигнуто через:
myEnumeration.First(t => some condition on t.Item2 ...).Item1;
спасибо, это на самом деле то, что я использую прямо сейчас, но он чувствует себя немного неудобно (особенно когда написан на VB.NET ... но какой код с участием дженериков в VB.NET выглядит красиво?) – tsimbalar
, чтобы проиллюстрировать: 'Dim lastAccountDiscountIndex = availableDiscounts.Выберите (Function (d, i) Новый KeyValuePair (из GlobalDiscountDefaultValue, Int32) (d, i)) _ .Last (функция (kvp) kvp.Key.Source.Type = GlobalDiscountSourceType.QuotationAccount) _ .Value' – tsimbalar
Well , не используйте VB.NET, тогда;) - Я знаю, что это не очень конструктивно, но VB.NET имеет основные недостатки синтаксиса IMHO в дженериках. BTW, с .NET 4, символ объединения '' 'больше не требуется во всех случаях] (http://www.simple-talk.com/dotnet/visual-studio/visual-studio-vb-2010 -укрепления /), вы должны иметь возможность, по крайней мере, отказаться от них. – Lucero