Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 28.03.2010
Сообщений: 9

Как создать 2 разных итератора ?

01.11.2010, 00:01. Показов 3231. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем есть задание,чтобы класс(содержащий коллекцию эл-ов) содержал 2 итератора, один для последовательного вывода эл-ов, а второй для случайного вывода. Знаю как реализовать один итератор с помощью переопределения метода GetEnumerator(), но как реализовать 2 итератора одновременно для 1го класса ?
C#
1
2
3
4
 public MyUsualEnumerator GetEnumerator()
 {
   return new MyUsualEnumerator(this);
 }
В MyUsualEnumerator описываются MoveNext,Current,id так как я захочу. Я могу создать паралельно и другой класс с другой реализацией MoveNext, но в GetEnumerator() уже прописан тип первого класса...
Или я не так понимаю смысл слова итератор? Это шаблон для правильной работы foreach ???
Плиз Хелп !
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2010, 00:01
Ответы с готовыми решениями:

Тело метода не может быть блоком итератора, так как "void" не является типом интерфейса итератора
using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using System.Collections; using System; public...

Как создать массив из объектов разных типов
Привет, интересует такая проблема: У меня есть абстрактный класс, от которого наследуются классы и потом создаются объекты этих классов....

Как создать много и разных столбцов в таблице
Создаю таблицу. Затем добавляю столбцы. Все замечательно. DataTable carsTable = new DataTable('Cars'); DataColumn CarID = new...

5
 Аватар для kanana
10 / 10 / 3
Регистрация: 01.12.2009
Сообщений: 172
01.11.2010, 01:07
я вообще ничего не понял. Что подразумевается под двумя разными итераторами?Итерация-это увеличение с каждым шагом. Ты можешь их сделать разных сколько угодно, а потом вызывать их. Если что-то другое имеется ввиду-уточни...
0
10 / 10 / 4
Регистрация: 29.10.2010
Сообщений: 29
01.11.2010, 07:57
итератор
Итератором называют метод, который позволяет объектам-получателям класса, содержащего коллекцию или массив, использовать оператор foreach, in (Справочник по C#) для перебора коллекции или массива.
Я, конечно, не гуру (сам только учусь),
Но разве нельзя перегрузить нужные методы?

Добавлено через 51 минуту
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
        public class DaysOfTheWeek : System.Collections.IEnumerable
        {
            string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };
 
            public System.Collections.IEnumerator GetEnumerator()
            {
                for (int i = 0; i < days.Length; i++)
                {
                    yield return days[i];
                }
            }
            public System.Collections.IEnumerable GetEnumerator2()
            {
                for (int i = days.Length-1; i >=0 ; i--)
                {
                    yield return days[i];
                }
            }
 
        }
 
        class TestDaysOfTheWeek
        {
            static void Main()
            {
                // Create an instance of the collection class
                DaysOfTheWeek week = new DaysOfTheWeek();
 
                // Iterate with foreach
                foreach (string day in week)
                {
                    System.Console.Write(day + " ");
                }
                Console.WriteLine();
                foreach (string day in week.GetEnumerator2())
                {
                    System.Console.Write(day + " ");
                }
 
                Console.ReadLine();
            }
 
        }
Это не перегрузка, это добавление именованного итератора
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
01.11.2010, 08:14
Цитата Сообщение от kanana Посмотреть сообщение
Итерация-это увеличение с каждым шагом
С инкрементом не путай. Иттератор перебирает по шагам, а увеличивает инкремент. Причём, перебор возможен в любом порядке: прямом последовательном, обратном последовательном, прямом с чередованием, обратном с чередованием...
0
90 / 89 / 13
Регистрация: 28.09.2010
Сообщений: 262
01.11.2010, 11:25
А не проще для коллекции сделать свойство, скажем
C#
1
bool ReturnRandom
и устанавливать/сбрасывать его перед foreach. Например
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SameCollection sc=new SameCollection();
sc.Add(...);
sc.Add(...);
sc.Add(...);
sc.Add(...);
sc.Add(...);
sc.ReturnRandom=false;
 //Обычный порядок
foreach (SameElement se in sc)
{
...
}
sc.ReturnRandom=true;
//случайный порядок
foreach (SameElement se in sc)
{
...
}
 
//реализация GetEnumerator
public IEnumerator GetEnumerator()
 {
   return this.ReturnRandom?new MyRandomEnumerator(this):new MyUsualEnumerator(this);
 }
0
0 / 0 / 0
Регистрация: 28.03.2010
Сообщений: 9
01.11.2010, 13:14  [ТС]
pop79: неплохой вариант и действительно простой, спс
planar: Вот то что я и хотел!!! спасибо, всё просто, но что-то в мозг не лезло !!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2010, 13:14
Помогаю со студенческими работами здесь

Как создать список элементов разных типов (рандомно)?
public static ArrayList NewCollection(int i) { Random ran = new Random(); ArrayList arr = new...

Как создать класс и использовать его в разных приложениях
Работаю в VS 2010, я новичок, пытаюсь разобраться с классами, раньше старался это обходить, сейчас пришлось влезать, вот моя программа ...

Как создать структуру разных типов с вложенными списками?
class a { class b { List&lt;T&gt; list=new List&lt;T&gt;; } class c { List&lt;T&gt; list=new...

Как подключаться к БД из разных активностей? Как создать 2 таблицы?
Добрый вечер! Мучаюсь с таким вопросом. Есть БД, нужно создать 2 таблицы. Одна таблица групп в одной активности, вторая таблица учащихся...

Как создать 2 разных подключения к сети Wi-Fi?
Хочу сделать 2 подключения к сети wi-fi на ноуте. Одна сеть со статическими адресами и одним набором параметров, другая это мобильный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru