Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# .NET

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Howaito Enjeru
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 11
#1

Enumerators - C#

20.05.2010, 20:11. Просмотров 1596. Ответов 18
Метки нет (Все метки)

Здравствуйте. У меня есть список. Я пробегаю по нему форичем, но могу сделать это только один раз. Подскажите плиз, как сбросить енумератор у списка? Если можно, то желательно и код тоже
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2010, 20:11
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Enumerators (C#):

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...

Enumerators and calculus - C++
Hi everyone. I want ask you. Can you help me to add some additional functions into my project. These are 2 functions which should be added:...


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

Или воспользуйтесь поиском по форуму:
18
kirill29
2064 / 1227 / 55
Регистрация: 01.02.2009
Сообщений: 2,842
20.05.2010, 20:13 #2
Howaito Enjeru, код покажи.
0
Mikant
1279 / 951 / 57
Регистрация: 08.12.2009
Сообщений: 1,299
20.05.2010, 20:24 #3
вообще говоря, у интерфейса IEnumerator есть метод Reset()

резервировать IEnumerator вручную не советую

если список самопальный, убедись, что в конструкторе энумератора есть Reset (он тоже должен быть правильным)

Добавлено через 10 минут
- конструктор вызывается (должен) в методе GetEnumerator в коллекции

работать должен только односторонне

если метод Reset у энумератора явно реализован (прим. к интерфейсу), то можно привести текущий энумератор к IEnumerator и вызвать
1
Howaito Enjeru
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 11
21.05.2010, 16:09  [ТС] #4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   
            List<Point> Result = new List<Point>();
            List<Point> tmp1 = new List<Point>();
            tmp1.Add(new Point(j, i));
            List<Point> tmp2 = new List<Point>();
            while (tmp1.Count != 0)
            { 
                List<Point>.Enumerator en = tmp1.GetEnumerator();
                ((IEnumerator<Point>) en).Reset();
                while(en.MoveNext())
                {
                     //modified tmp2
                }
                Result.AddRange(tmp1);
                tmp1 = tmp2;
             }
Пишет, что был модифицирован tmp1. Если кто сталкивался, то помогите плиз. Желательно кодом
0
Humanitis
175 / 167 / 6
Регистрация: 12.01.2009
Сообщений: 430
21.05.2010, 16:59 #5
5 строчку поставить после 7
1
nio
5947 / 3353 / 200
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
22.05.2010, 10:27 #6
сделай через цикл for
0
Howaito Enjeru
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 11
22.05.2010, 12:15  [ТС] #7
Через цикл медленее будет - а мне нужна оптимизация по времени. Я уже решил эту проблему - там 5-ю строчку после 7-й надо было поставить.
0
Mikant
1279 / 951 / 57
Регистрация: 08.12.2009
Сообщений: 1,299
23.05.2010, 01:28 #8
я каэшн рад, что решил, но вот только через цикл будет быстрее, примерно, раз в 150 ! не мудри лишнего
0
Howaito Enjeru
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 11
23.05.2010, 01:45  [ТС] #9
Через цикл будет идти индексация - а чтобы получить i-тый элемент нужно пробежаться по списку до этого элемента. Я на плюсах писал списки, поэтому знаю как все устроенно. А через foreach идет работа с инумератором, проверял лично , а это совсем другое, он просто получает следующий элемент списка
0
Mikant
1279 / 951 / 57
Регистрация: 08.12.2009
Сообщений: 1,299
23.05.2010, 11:56 #10
Howaito Enjeru, прямо не знаю что тут ответить... сравни их чтоль
0
HIMen
4163 / 1412 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
24.05.2010, 03:40 #11
Howaito Enjeru, Для больших связанных списков вы правы, но List основан на массиве, у него есть прямой доступ к любому элементу

Mikant, foreach не медленнее for, сам проверял для List и массивов, время примерно одинаковое
0
Mikant
1279 / 951 / 57
Регистрация: 08.12.2009
Сообщений: 1,299
24.05.2010, 03:56 #12
HIMen, опять возьмемся за старое?))) все зависит от размеров! это очень нехорошая практика программирования (когда не знаешь, что есть что)
0
HIMen
4163 / 1412 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
24.05.2010, 03:57 #13
Со стековкрфлоу
для массивов
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
44
45
46
47
class Test
{
    const int Size = 1000000;
    const int Iterations = 10000;
    static void Main()
    {
        double[] data = new double[Size];        
        Random rng = new Random();
        for (int i = 0; i < data.Length; i++)
        {
            data[i] = rng.NextDouble();
        }
        double correctSum = data.Sum();
        Stopwatch sw = Stopwatch.StartNew();
        for (int i = 0; i < Iterations; i++)
        {
            double sum = 0;
            for (int j = 0; j < data.Length; j++)
            {
                sum += data[j];
            }
            if (Math.Abs(sum - correctSum) > 0.1)
            {
                Console.WriteLine("Summation failed");
                return;
            }
        }
        sw.Stop();
        Console.WriteLine("For loop: {0}", sw.ElapsedMilliseconds);        
        sw = Stopwatch.StartNew();
        for (int i = 0; i < Iterations; i++)
        {
            double sum = 0;
            foreach (double d in data)
            {
                sum += d;
            }
            if (Math.Abs(sum - correctSum) > 0.1)
            {
                Console.WriteLine("Summation failed");
                return;
            }
        }
        sw.Stop();
        Console.WriteLine("Foreach loop: {0}", sw.ElapsedMilliseconds);
    }
}
Одинаково.
Там много подобных тестов и в среднем, для массивов одинаково, для List - foreach незначительно долше

Для списков вот хороший материал http://diditwith.net/2006/10/05/PerformanceOfForeachVsListForEach.aspx
1
Howaito Enjeru
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 11
24.05.2010, 14:37  [ТС] #14
Спасибо за инфу
0
Mikant
1279 / 951 / 57
Регистрация: 08.12.2009
Сообщений: 1,299
24.05.2010, 15:14 #15
хм. ну вот картинка из твоего источника... разница в 2.5 раза в среднем...
0
Миниатюры
Enumerators  
24.05.2010, 15:14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru