0 / 0 / 1
Регистрация: 21.12.2012
Сообщений: 49
1

Iterator своего класса

01.06.2014, 12:00. Показов 1989. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могу понять как сделать генератор своего класса что бы потом использовать в foreach. Максимум получалось возвращать 1 элемент.

Вот мой нерабочий примерный итератор...
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
    public class HorizontalGenerator 
    {
        private Queue queue;
        private RedBlackTree tree;
        private RedBlackNode deq;
        private RedBlackNode sentinelNode;
 
        public HorizontalGenerator(RedBlackTree itertree)
        {
            tree = itertree;
            sentinelNode = tree.SentinelNode;
            queue = new Queue();
            queue.Enqueue(tree.Root);
            deq = tree.Root;
        }
 
        public bool HasNext()
        {
            if (queue.Count > 0) return true;
            else return false;
        }
 
        public IEnumerator<RedBlackNode> NextElement()
        {
            if (HasNext()) yield return deq;
            if (deq.Left != sentinelNode) queue.Enqueue(deq.Left);
            if (deq.Right != sentinelNode) queue.Enqueue(deq.Right);
            if (HasNext()) deq = (RedBlackNode)queue.Dequeue();
        }
    }
Вот что я хочу получить

C#
1
2
3
4
5
            HorizontalGenerator G = new HorizontalGenerator(tree);
            foreach (RedBlackNode iter in G)
            {
                //dosemething();
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2014, 12:00
Ответы с готовыми решениями:

Вывести массив своего класса
Создал класс Address с полями и свойствайми с методами доступа get и set. В классе Main пытаюсь...

Сортировка List состоящего из своего класса
Основная задача сделать сортировку по столбца в DataGridView, данные которого хранятся в...

Класс, содержащий объект своего класса
Если класс содержит объект своего класса. Почему при создании объекта такого класса не создается...

ООП. Создание списка из своего класса
Задача - Создать список из готового класса. Примерный код класса: public class mFiles { ...

2
Эксперт .NET
17772 / 12925 / 3378
Регистрация: 17.09.2011
Сообщений: 21,198
01.06.2014, 12:11 2
В данный момент ваш класс работает так:
C#
1
foreach (RedBlackNode iter in G.NextElement())
Измените его на такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class HorizontalGenerator : IEnumerable<RedBlackNode>
{
   ...
   public IEnumerator<RedBlackNode> GetEnumerator()
   {
            if (HasNext()) yield return deq;
            if (deq.Left != sentinelNode) queue.Enqueue(deq.Left);
            if (deq.Right != sentinelNode) queue.Enqueue(deq.Right);
            if (HasNext()) deq = (RedBlackNode)queue.Dequeue();
   }
   IEnumerator IEnumerable.GetEnumerator()
   {
      return GetEnumerator();
   }
}
0
0 / 0 / 1
Регистрация: 21.12.2012
Сообщений: 49
01.06.2014, 13:10  [ТС] 3
kolorotur, Спасибо помогли, но чуть-чуть не так но то мелочи

Немного подправил и вот что получилось
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
    public class HorizontalGenerator: IEnumerable<RedBlackNode> 
    {
        private Queue queue;
        private RedBlackTree tree;
        private RedBlackNode deq;
        private RedBlackNode sentinelNode;
 
        public HorizontalGenerator(RedBlackTree itertree)
        {
            tree = itertree;
            sentinelNode = tree.SentinelNode;
            queue = new Queue();
            queue.Enqueue(tree.Root);
            deq = tree.Root;
        }
        private bool HasNext
        {
            get
            {
                if (queue.Count > 0) return true;
                else return false;
            }
 
        }
        public IEnumerator<RedBlackNode> GetEnumerator()
        {
            while (HasNext)
            {
                deq = (RedBlackNode)queue.Dequeue();
                yield return deq;
                if (deq.Left != sentinelNode) queue.Enqueue(deq.Left);
                if (deq.Right != sentinelNode) queue.Enqueue(deq.Right);
                
            }
        }
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
0
01.06.2014, 13:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2014, 13:10
Помогаю со студенческими работами здесь

Явное преобразование своего класса в int
Всем привет! Есть такой класс: public class Address { private int _Field; ...

классы хранящие значение своего класса =)
у меня есть несколько классов с1 с2 с3 с4 итд все унаследованы от одного класса &quot;с&quot; у которого...

Метод который возвращает имя своего класса.
Подскажите как реализовать метод, который будет возвращать имя своего класса, причем не в формате...

Как в .settings фале сохранить объект своего класса?
К примеру, есть самописный класс, а в выборе настроек его нет:...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru