Получение элементов с индексами при обходе коллекции - C#

Узнай цену своей работы

Формулировка задачи:

В Python можно обойти коллекцию сразу получая элементы и индексы:
for item_index, item_itself in enumerate(collection):
Как такое сделать в C#? Пока что ничего кроме:
    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);
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы