Filtered
Описание
Модуль Filtered
предоставляет функциональность для работы с отфильтрованными сущностями в ECS фреймворке. Основное назначение - хранение и итерация по сущностям, которые прошли фильтрацию по определенным критериям компонентов.
Назначение
- Хранение списка отфильтрованных сущностей
- Предоставление методов для синхронной и асинхронной итерации
- Поддержка как последовательной, так и параллельной обработки сущностей
- Обеспечение доступа к количеству и списку отфильтрованных сущностей
Архитектура
Модуль состоит из следующих основных частей:
- Класс Filtered - основной класс для работы с отфильтрованными сущностями
- Тип EntityIterationCallback - тип функции обратного вызова для итерации по сущностям
Диаграмма зависимостей
Filtered
├── EntityIterationCallback
└── IEntity (из модуля Entity)
Использование
Создание объекта Filtered
import { Filtered } from '@data/filtered';
// Создаем объект с массивом сущностей
const filtered = new Filtered([entity1, entity2, entity3]);
Синхронная итерация
// Используем forEach для синхронного перебора
filtered.forEach((entity, index) => {
console.log(`Обработка сущности ${index}: ${entity.name}`);
});
Асинхронная последовательная итерация
// Последовательная обработка с ожиданием
await filtered.sequential(async (entity, index) => {
await someAsyncOperation(entity);
console.log(`Сущность ${index} обработана`);
});
Асинхронная параллельная итерация
// Параллельная обработка всех сущностей
await filtered.parallel(async (entity) => {
await someAsyncOperation(entity);
});
API
Класс Filtered
Свойства
count: number
- количество сущностей в коллекцииitems: IEntity[]
- массив всех отфильтрованных сущностей
Методы
forEach(callback: EntityIterationCallback): void
- синхронная итерацияsequential(callback: EntityIterationCallback): Promise<void>
- асинхронная последовательная итерацияparallel(callback: EntityIterationCallback): Promise<void>
- асинхронная параллельная итерация
Тип EntityIterationCallback
type EntityIterationCallback = (entity: IEntity, index?: number) => void | Promise<void>;
FAQ
В чем разница между методами forEach, sequential и parallel?
forEach
- синхронный метод, блокирует выполнение до завершения всех итерацийsequential
- асинхронный метод, обрабатывает сущности по очередиparallel
- асинхронный метод, обрабатывает все сущности одновременно
Когда использовать parallel, а когда sequential?
parallel
- когда операции независимы и могут выполняться параллельноsequential
- когда важен порядок обработки или требуется избежать конкурентного доступа
Предоставляет ли Filtered функционал фильтрации?
Нет, Filtered только хранит уже отфильтрованные сущности. Фильтрация выполняется в модуле EntityStorage.
Сохраняется ли порядок сущностей при итерации?
Да, все методы итерации сохраняют порядок сущностей, в котором они были добавлены в коллекцию.