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

Можно ли организовать без List<>?

07.11.2013, 09:58. Показов 961. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня есть список List<Bee> bees, в который я вношу объекты. После каждые 0,5сек вызваю Live для всех этих объектов - постоянно пробегаюсь по списку. А можно ли это сделать без использования списка как-то? QueenBee и MaleBee - наследники от Bee.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
QueenBee m = new QueenBee("matcka", coor, 1);   //создание матки       
bees.Add(m);
 
for (int i = 1; i < 6; i++)   //создание 5 трутней
{     
   MaleBee tr = new MaleBee("truten", coord, i);
   bees.Add(tr);                
}
            
while (true)
{
   Thread.Sleep(500);
   foreach (Bee b in currentHive.bees)
   {
      b.Live();
   }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.11.2013, 09:58
Ответы с готовыми решениями:

Как можно удалить все элементы из List без указания диапазона и индекса?
че-то так не получается digit.Remove();

Как проще можно очистить коллекцию List в зависимости от предиката (без присваивания)?
Например есть List из объектов &quot;Человек&quot;. Нужно очистить от всех объектов у которых возраст &lt; 18. Без присваивания имел ввиду...

Организовать поиск по List<T> по условиям
Добрый день. Подскажите как организовать поиск по List&lt;T&gt; по условиям, которые могут во время выполнения программы добавляться или...

15
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.11.2013, 10:30
Можно через мультикаст-делегат, но за кулисами будет тот же пробег по списку и вызов метода на каждом объекте.
Да и зачем менять?
0
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 31
07.11.2013, 10:34  [ТС]
kolorotur, ясно, спасибо.
интересно, есть ли другие способы перебора объектов.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.11.2013, 10:40
Цитата Сообщение от shauro Посмотреть сообщение
есть ли другие способы перебора объектов.
Перебор подразумевает некое действие, повторяющееся для каждого объекта, потому обязателен цикл.
Ну а циклы бывают разные: for, while, do-while, foreach, goto, да хотя бы рекурсия, хоть и не рекомендуется.
0
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 31
07.11.2013, 10:50  [ТС]
kolorotur, сейчас попробую объяснить, что именно имела ввиду под этим перебором. Звучит как "для всех экземпляров класса Bee (а следовательно, и его наследников) выполнить метод Live". Или хотя бы выполнить этот метод для всех экземпляров класса MaleBee.
Если это реально как-то сделать через мультикаст-делегат, то сейчас буду разбираться, пробовать.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.11.2013, 11:02
Цитата Сообщение от shauro Посмотреть сообщение
Звучит как "для всех экземпляров класса Bee (а следовательно, и его наследников) выполнить метод Live". Или хотя бы выполнить этот метод для всех экземпляров класса MaleBee.
Цикл, так или иначе

Цитата Сообщение от shauro Посмотреть сообщение
Если это реально как-то сделать через мультикаст-делегат, то сейчас буду разбираться, пробовать.
Вполне реально, достаточно его создать (сюрприз: через цикл!)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
QueenBee m = new QueenBee("matcka", coor, 1);   //создание матки       
bees.Add(m);
 
Action callLiveOnAllBees = new Action(m.Live);
 
for (int i = 1; i < 6; i++)   //создание 5 трутней
{     
   MaleBee tr = new MaleBee("truten", coord, i);
   bees.Add(tr); 
   callLiveOnAllBees += tr.Live;               
}
            
while (true)
{
   Thread.Sleep(500);
   callLiveOnAllBees();
}
Но такой подход добавит вам дополнительной головной боли: при добавлении объектов в коллекцию или их удалении вам придется добавлять или удалять методы в делегате.

Добавлено через 2 минуты
Хотя, можно ведь и так:
C#
1
2
3
4
5
while (true)
{
   Thread.Sleep(500);
   currentHive.bees.ForEach(b => b.Live());
}
Но там тоже в кишках цикл.
1
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 31
07.11.2013, 11:08  [ТС]
kolorotur, ясно, спасибо за то, что все разьяснили )
0
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 31
07.11.2013, 11:17  [ТС]
kolorotur, попробовала. Вот ошибки, которые выдало в таком случае.
Миниатюры
Можно ли организовать без List<>?  
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.11.2013, 11:20
Цитата Сообщение от shauro Посмотреть сообщение
Вот ошибки, которые выдало в таком случае.
Обратите внимание, что в моем коде при добавлении метода в делегат в конце имени метода не ставятся скобки, т.к. это не вызов.
0
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 31
07.11.2013, 11:26  [ТС]
kolorotur, точно. Исправила, вот что выдает в таком случае.
Миниатюры
Можно ли организовать без List<>?  
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.11.2013, 11:36
shauro, покажите кусок кода, где вы добавляете методы в делегат.
0
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 31
07.11.2013, 11:45  [ТС]
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
class Program
    {
        static void Main(string[] args)
        {
            Hive currentHive = new Hive();            
            Random random = new Random();
            Coords coor = new Coords(random.Next(currentHive.size), random.Next(currentHive.size));
            QueenBee m = new QueenBee("matcka", coor, 1);       
            //currentHive.bees.Add(m);
            Action LiveOnAllBees = new Action(m.Live);
 
            for (int i = 1; i < 6; i++)   
            {
                Coords coorr = new Coords(random.Next(currentHive.size), random.Next(currentHive.size));
                MaleBee tr = new MaleBee("truten", coorr, i);
                //currentHive.bees.Add(tr);
                LiveOnAllBees += tr.Live;
            }
 
            while (true)
            {
                Thread.Sleep(500);
                foreach (Bee b in currentHive.bees)
                {
                    //b.Live(currentHive.size, currentHive.honeycomb);
                    LiveOnAllBees();
                }
            }
        }
    }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.11.2013, 12:03
shauro, вроде бы все нормально выглядит, надо только убрать цикл foreach.
Покажите как объявлен метод Live, если не сложно.
0
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 31
07.11.2013, 12:06  [ТС]
kolorotur, ой, забыла про этот цикл.
Вообще у меня Live принимает аргументы, может из-за этого?

C#
1
2
3
4
5
6
7
8
9
10
11
public void Live(int size, List<Bee>[,] honeycomb)
        {
            if (this.LastMoveTime > this.pauseTime)
            {
                this.Move(size, honeycomb);
                this.LastMoveTime = 0;
                AddBee(honeycomb);
                CheckItem(honeycomb);
            }
            this.LastMoveTime += 500;
        }
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.11.2013, 12:10
Цитата Сообщение от shauro Посмотреть сообщение
Вообще у меня Live принимает аргументы, может из-за этого?
Ну разумеется
Замените Action на Action<int, List<Bee>[,]>, а параметры передавайте при вызове LiveOnAllBees:
C#
1
LiveOnAllBees(42, listMatrix);
1
0 / 0 / 0
Регистрация: 31.10.2013
Сообщений: 31
07.11.2013, 12:15  [ТС]
kolorotur, оо, отлично, работает! Спасибо! Прошу прощения, что сразу не указала )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2013, 12:15
Помогаю со студенческими работами здесь

Как организовать цикл по всем элементам List<Class>?
Здравствуйте, Как организовать цикл по всем элементам List&lt;Class&gt;? Делаю так: class Program { static myClass c1, c2; ...

Можно ли организовать форум на ASP без ODBC?!
Привет всем! Вот такая проблемка. Есть хостинг с ASP, но без ODBC. ...

Конвертировать один элемент из List<List<Class>> в list и string
Как можно перевести один выбранный элемент из List&lt;List&lt;Data&gt;&gt; myList в list и string? Например, myList. Сейчас я могу с помощью...

Добавление double в list без округления
При добавлении в лист realX.Add(x); realY.Add(y); realZ.Add(z); значения...

Поиск по list без учёта регистра
Есть некий list с записанными в него объектами класса Person. У объектов класса Person есть поле FirstName (имя) и LastName (фамилия). Как...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru