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

Массив коллекций List[]<T> - можно так сделать?

11.08.2016, 13:46. Показов 2692. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
У меня вопрос следующего характера: у меня есть три стадии жизни юнитов - рождение, логика (передвижение, столкновения и тд) и смерть.
С логикой и смертью все понятно, для них у меня есть следующие коллекции:
C#
1
2
        public List<UnitWalk> Units = new List<UnitWalk>();// список юнитов для просчета логики
        public List<UnitWalk> UnitsDeadPool = new List<UnitWalk>(); // список юнитов на умерщвление
У каждого юнита есть свои параметры, они уже выстроены, считаются. Если логика говорит, что юнит должен умереть, этот юнит переходит в "мертвый бассейн".
Но вопрос возник со списком рождаемых юнитов. Армий может быть несколько, из разных зданий; в армии есть первый юнит (генерал, ведущий за собой конкретную армию) и остальные. Есть распределение по дороге. Все эти параметры просчитываются при создании списка. Когда армия создана, распределена, полностью появилась и сделала первые шаги, она начинает передаваться в список юнитов Units для дальнейшего управления логикой.
Так вот, если всех рождаемых юнитов из разных домов поместить в один список, не знаю, как их контролировать и отделять друг от друга, как выявлять генерала и распределять по дороге (проблема не в отслеживании дома-родителя или каких других параметров, а именно с указанными вещами). Мне нужен массив коллекций, что-то по типу
C#
1
public List[]<UnitWalk> UnitsBornPool = new List[]<UnitWalk>();
Но я такого определения не нашел, язык ругается. Есть что-то похожее?
Каждый элемент этого массива будет содержать коллекцию, описывающую конкретную армию конкретного дома. Коллекция, в свою очередь, содержит юнитов, распределяет их, а дальше передает в следующую общую для всех армий коллекцию Units.
Помогите, пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.08.2016, 13:46
Ответы с готовыми решениями:

Добавление строк и элементов в коллекцию для коллекций <List<List<T>
Доброго времени суток , никак не могу добавить строку в коллекцию коллекций . У меня нет определенного количества данных . Могли б...

Коллекция коллекций List<List<T>>
Создал коллекцию коллекций List&lt;List&lt;T&gt;&gt;. Добавил в большую коллекцию её составную часть (малую коллекцию) через Add Потом малую...

Создать коллекцию коллекций (List)
Подскажите пожалуйста как правильно создать коллекцию коллекций? List&lt;byte&gt; audio_bytes = new List&lt;byte&gt;(new byte { }); //Данные...

6
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
11.08.2016, 14:25
эм... что то типа такого List<List<UnitWalk>>?
0
4 / 4 / 3
Регистрация: 25.04.2015
Сообщений: 95
11.08.2016, 14:39  [ТС]
А так можно?
0
 Аватар для Cupko
658 / 595 / 171
Регистрация: 17.07.2012
Сообщений: 1,682
Записей в блоге: 1
11.08.2016, 15:32
Цитата Сообщение от Diamond15 Посмотреть сообщение
Но я такого определения не нашел, язык ругается. Есть что-то похожее?
Потому что синтаксис следующий:
C#
1
public List<string>[] UnitsBornPool = new List<string>[array_capacity]
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
11.08.2016, 15:33
Diamond15, а почему нет?
з.ы. правда я не понял, почему конкретная армия описывается массивом
0
4 / 4 / 3
Регистрация: 25.04.2015
Сообщений: 95
11.08.2016, 15:46  [ТС]
Пробую твой вариант, вроде работает
Смотри, посылаю армию из дома. Первый юнит должен быть генералом, идет по центру дороги, остальные идут, во-первых, с некоторым опозданием (распределение по времени или по пройденному пути от предыдущих юнитов), во-вторых, с распределением по ширине дороге, чтобы друг на друга не рисовались. Из дома они "списываются" просто числом, то есть отправка армии у меня не в классе дома, а в классе управления миров/стадией. Стадия узнает, какое количество надо отправить, а также откуда/куда. Если коллекция одна, то проверка условия "если первый юнит, то генерал" будет работать только с одной армией. Соответственно, из другого дома тут же отправляем армию, а там генерала уже нет, коллекция одна и она забита. Также и распределение по дороге, отправляются человечки с интервалом в 0.25сек. Если из другого дома отправить армию, таймер будет накладываться.
Поэтому нужно сделать так, чтобы армии не зависели друг от друга, а это и есть массив коллекций.
Вариант List<List<T>> вроде работает, по крайней мере, на стадии инициации компилятор не ругается. Сейчас поколдую и отпишусь, работает ли или нет

Добавлено через 1 минуту
А array_capacity если заранее не известен, добавлять можно будет в него потом по факту?
0
4 / 4 / 3
Регистрация: 25.04.2015
Сообщений: 95
12.08.2016, 21:44  [ТС]
Вроде все сработало ( я про List<List<T>>), но в нем действительно не оказалось необходимости. Просто добавил параметр количества добавляемых юнитов и расчет и передачу всех параметров для рождения юнита прямо в методе:
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
        public void AddUnit(int _army, House argAttacking, House argTarget)
        {
            UnitLines _unitLine; // их расположение на дороге
            double _timeBorn=0; // для партий юнитов
            int _bornScore=0; // счетчик. Сначала двое бегут, потом партия из троих, потом опять двое и тд.
            for (int i = 0; i < _army; i++) 
            { 
                UnitWalk locUnit = new UnitWalk(Content);
                int _lineChoosing = i % 5;
               
                switch (_lineChoosing)
                {
                    case 0:
                        _unitLine = UnitLines.Mid;
                        _bornScore++;
                        break;
                    case 1:
                        _unitLine = UnitLines.LeftMid;
                        break;
                    case 2:
                        _unitLine = UnitLines.RigthMid;
                        _bornScore++;
                        break;
                    case 3:
                        _unitLine = UnitLines.Left;
                        break;
                    case 4:
                        _unitLine = UnitLines.Right;
                        break;
                    default:
                        _unitLine = UnitLines.Mid;
                        break;
                }
                _timeBorn = Settings.UnitBornTime * _bornScore;
                locUnit.Load(_timeBorn, _unitLine, argAttacking.HouseDescript, argTarget.HouseDescript);
                Units.Add(locUnit);
            }
        }
В общем, одной коллекцией все, а остальные расчеты у самих юнитов происходят. Им просто передается задержка перед рождением, распределение по ширине дороги, ну и два дома родитель-цель.
Так что спасибо, на мысль навели
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.08.2016, 21:44
Помогаю со студенческими работами здесь

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

На основе коллекций Queue и List<T> запрограммировать модель эскалатора
Есть задание, которое ну совсем не знаю как делать. Если кто может подсказать, или даже помочь с реализацией, буду очень благодарен. ...

На основе коллекций Queue и List<T> запрограммировать модель эскалатора
Доброго времени суток, вот нужно сделать программу на С#. хоть С# я и знаю немного, но моего ума не хватает на составление кода. Помогите...

Освобождение памяти из коллекций (List, Dictionary и др) экземпляров своих классов
Добрый всем день! Мне пришлось работать со своими классами, которые, посути, содержат только совокупность полей. В работе обрабатываются...

Как сделать так, что бы после обновления первого List<> он не менялся во втором
Здравствуйте, подскажите пожалуйста, как сделать так, что бы после обновления первого списка он не менялся во втором. то есть чтобы на...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru