Получение элементов с индексами при обходе коллекции - C#
Формулировка задачи:
В Python можно обойти коллекцию сразу получая элементы и индексы:
Как такое сделать в C#? Пока что ничего кроме:
не пришло, есть что-то элегантнее?
for item_index, item_itself in enumerate(collection):
public static class EnumerateExtension { public struct IndexedItem<T> { public int index; public T item; public IndexedItem(int index, T item) { this.index = index; this.item = item; } } public static IEnumerable<IndexedItem<T>> Enumerate<T>(this IEnumerable<T> sequence) { var counter = 0; foreach (var i in sequence) yield return new IndexedItem<T>(counter++, i); } } class Program { public static void Main() { var array = new[] { "John", "Maria", "Fred" }; foreach (var e in array.Enumerate()) Console.WriteLine("{0}: {1}", e.index, e.item); Console.ReadKey(); } }
Решение задачи: «Получение элементов с индексами при обходе коллекции»
textual
Листинг программы
class Program { public class ValInd<T> { public T ty; public int Index; } public static List<ValInd<T>> GetInd<T>(ICollection<T> array) { return array.Select((x, i) => new ValInd<T>() { ty = x, Index = i }).ToList(); } static void Main(string[] args) { var ai = new int[10]; var ac = new char[10]; var ld = new List<DriveInfo>(); ld.Add(new DriveInfo("C")); foreach (var v in GetInd(ai)) Console.WriteLine(v.ty + " " + v.Index); foreach (var v in GetInd(ac)) Console.WriteLine(v.ty + " " + v.Index); foreach (var v in GetInd(ld)) Console.WriteLine(v.ty.DriveType + " " + v.Index); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д