Skip to content

Home > @esengine/ecs-framework-monorepo > SparseSet

SparseSet class

稀疏集合实现

提供O(1)的插入、删除、查找操作,同时保持数据的紧凑存储。 使用密集数组存储实际数据,稀疏映射提供快速访问

T 存储的数据类型

Signature:

typescript
export declare class SparseSet<T>

Example

typescript
const sparseSet = new SparseSet<Entity>();

sparseSet.add(entity1);
sparseSet.add(entity2);

if (sparseSet.has(entity1)) {
    sparseSet.remove(entity1);
}

sparseSet.forEach((entity, index) => {
    console.log(`Entity at index ${index}: ${entity.name}`);
});

Properties

Property

Modifiers

Type

Description

isEmpty

readonly

boolean

检查集合是否为空

size

readonly

number

获取集合大小

Methods

Method

Modifiers

Description

add(item)

添加元素到集合

clear()

清空集合

every(predicate)

检查是否所有元素都满足条件

filter(predicate)

过滤集合中的元素

find(predicate)

查找第一个满足条件的元素

forEach(callback)

遍历集合中的所有元素

保证遍历顺序与添加顺序一致(除非中间有删除操作)。 遍历性能优秀,因为数据在内存中连续存储。

getByIndex(index)

根据索引获取元素

getDenseArray()

获取密集数组的只读副本

返回数组的浅拷贝,确保外部无法直接修改内部数据。

getDenseArrayUnsafe()

获取密集数组的直接引用(内部使用)

警告:直接修改返回的数组会破坏数据结构的完整性。 仅在性能关键场景下使用,并确保不会修改数组内容。

getIndex(item)

获取元素在密集数组中的索引

getMemoryStats()

获取内存使用统计信息

has(item)

检查元素是否存在于集合中

map(callback)

映射集合中的所有元素

remove(item)

从集合中移除元素

使用swap-and-pop技术保持数组紧凑性: 1. 将要删除的元素与最后一个元素交换 2. 删除最后一个元素 3. 更新映射表

some(predicate)

检查是否存在满足条件的元素

toArray()

转换为数组

toSet()

转换为Set

validate()

验证数据结构的完整性

调试用方法,检查内部数据结构是否一致。

基于 MIT 许可证发布