Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод текущего элемента масива 
V
    Опции темы
N1ko
Дата 30.6.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Код

            DirectoryInfo main_dir = new DirectoryInfo(@"D:\Music\");
            DirectoryInfo[] my = main_dir.GetDirectories();
            foreach (DirectoryInfo i in my)
            {
                // Здесь нужно определить текущий элемент и вывести в MessageBox
                // Как это сделать?
                
            }

PM MAIL ICQ   Вверх
Lirius
Дата 1.7.2009, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Код

 DirectoryInfo main_dir = new DirectoryInfo(@"D:\test_pic\");
            DirectoryInfo[] my = main_dir.GetDirectories();
            foreach (DirectoryInfo i in my)
            {
                // Заменить на MessageBox.Show();
                Console.WriteLine(i.Name);

            }

PM MAIL   Вверх
N1ko
Дата 1.7.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Я извеняюсь. Немного неправильно сформулировал вопрос. Как вывести номер текущего элемента? С названием понятно.
PM MAIL ICQ   Вверх
Экскалупатор
Дата 1.7.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



N1ko, а просто посчитать?
PM MAIL ICQ   Вверх
Экскалупатор
Дата 1.7.2009, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



если вместо 
Код

foreach (DirectoryInfo i in my)
            {
                // Заменить на MessageBox.Show();
                Console.WriteLine(i.Name);
            }



сделать так:
Код

for (int i=0; i<my.Length; i++)
            {    
                // Заменить на MessageBox.Show();
                Console.WriteLine(my[i].Name);
                Console.WriteLine("номер текущего элемента = " + i.ToString());
            }


то номер будет известен постоянно, хотя может можно и через foreach сделать...
PM MAIL ICQ   Вверх
N1ko
Дата 1.7.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Я понимаю что так можно сделать. Ещё внутрь foreach можно вставить счётчик, который при каждом прохождении цикла будет наращиваться на один. Но возможно существуют встроенные методы у foreach для выведения текущей позиции? Сколько я не пробовал, не получалось.
PM MAIL ICQ   Вверх
Heinzz
Дата 1.7.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Код

DirectoryInfo main_dir = new DirectoryInfo(@"C:\Music\");
            DirectoryInfo[] my = main_dir.GetDirectories();
            List<DirectoryInfo> list = my.ToList();
            foreach (DirectoryInfo i in list)
            {
                Console.WriteLine(list.IndexOf(i));
            }
            Console.ReadKey();

Это вариант без счетчиков


--------------------
user posted image
PM MAIL   Вверх
mihryak
Дата 1.7.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(Heinzz @  1.7.2009,  22:35 Найти цитируемый пост)

Это вариант без счетчиков 

зато на каждой итерации будет происходить поиск текущего элемента в коллекции. браво!
PM MAIL ICQ   Вверх
Экскалупатор
Дата 1.7.2009, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



PM MAIL ICQ   Вверх
Heinzz
Дата 2.7.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Цитата(Heinzz @  1.7.2009,  22:35 Найти цитируемый пост)

Это вариант без счетчиков 
зато на каждой итерации будет происходить поиск текущего элемента в коллекции. браво!


Ну хозяин-барин, надо индекс - пожалуйста!
Про скорострельность никто не говорил, а ежели это нужно для обзора подкаталогов, то она тут непринципиальна.


--------------------
user posted image
PM MAIL   Вверх
mihryak
Дата 2.7.2009, 12:24 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 731
Регистрация: 28.4.2007
Где: С-Пб

Репутация: 10
Всего: 36



Цитата(Heinzz @  2.7.2009,  12:47 Найти цитируемый пост)
Про скорострельность никто не говорил

нет, не говорил
но есть такие способы решения задачи, которые вне зависимости от требований к скорости-памяти будут неприемлимыми.
твой способ один из них, извини за прямоту
плохой код всегда плохой

Это сообщение отредактировал(а) mihryak - 2.7.2009, 12:25
PM MAIL ICQ   Вверх
gambit
Дата 3.7.2009, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***
Награды: 1



Профиль
Группа: Комодератор
Сообщений: 1359
Регистрация: 25.6.2006
Где: я?

Репутация: 3
Всего: 40



mihryak, как то можно подцепить интерфейс foreach и самому его реализовать, тогда тебе будет доступен индекс текущего эллемента.
PM MAIL ICQ Skype   Вверх
Экскалупатор
Дата 3.7.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата

mihryak, как то можно подцепить интерфейс foreach и самому его реализовать, тогда тебе будет доступен индекс текущего эллемента.

вот тут написано, (я же уже давал ссылку)
PM MAIL ICQ   Вверх
PashaPash
Дата 3.7.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 9
Всего: 49



Цитата(N1ko @  1.7.2009,  21:15 Найти цитируемый пост)
Я понимаю что так можно сделать. Ещё внутрь foreach можно вставить счётчик, который при каждом прохождении цикла будет наращиваться на один. Но возможно существуют встроенные методы у foreach для выведения текущей позиции? Сколько я не пробовал, не получалось. 

foreach предназначен для "пробегания" по IEnumerable. По IEnumerable, в общем случае, можно пройти только в одном направлении. Кроме того, IEnumerable не гарантирует что последовательность до и после текущего элемента вообще существуетю. Понятия "текущая позиция" тоже нет, есть только "текущий елемент". Аналог foreach по IEnumerable в реальной жизни - гопник Вася ест семки. Он точно знает что за семка у него в руке (Current). Он так же может взять следующую семку (MoveNext). Но он явно не знает порядковый номер текщей семки.

Хочешь текущего индекса при проходе по массиву - используй for. 

Экскалупатор, по ссылке текущий индекс в ArrayEnumerator - это private-поле в private class. Не слишком удобно. С другой стороны - не зря его так глубоко спрятали.


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0533 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.