@blackglory/structures

中文文档
0.15.4发布于 2026/10/08MITTypeScriptES Module近 30 天下载 2.2万

共同结构.

中文使用文档
文档目录29 节
  1. 安装
  2. API 密码
  3. 方框
  4. 计数
  5. 阵列
  6. 已键入阵列
  7. 发送器
  8. 发电机
  9. AsyncGenerator 编辑器
  10. 大地图
  11. 大队
  12. 散列图
  13. 散装
  14. 半径
  15. 可过期映射
  16. TLRUMAP (法语)
  17. 队列
  18. 唯一队列
  19. 三进制图
  20. 字符串图
  21. 半径
  22. 字符串RadixTree 键
  23. 动态串行阵列
  24. 可调色板阵列
  25. 排序的设置
  26. 断开组合
  27. 位集
  28. 组合
  29. 映射图

结构

共同结构.

安装

npm install --save @blackglory/structures
# or
yarn add @blackglory/structures

API 密码

方框

class Box<T> {
  get [Symbol.toStringTag](): string

  constructor(value: T)

  get(): T
  set(value: T): void
}

计数

转换 ConstoArray 格式

function convertConsToArray<T>([value, next]: Cons<T>): T[]

转换箭头

function convertArrayToCons<T>([value, ...next]: T[]): Cons<T>

阵列

切片箭头

function sliceArrayLeft<T>(arr: readonly T[], num: number): T[]

切片箭头右侧

function sliceArrayRight<T>(arr: readonly T[], num: number): T[]

短线箭头左转

function truncateArrayLeft(arr: unknown[], num: number): void

截线箭头右转

function truncateArrayRight(arr: unknown[], num: number): void

清除箭头

function clearArray(arr: unknown[]): void

已键入阵列

获取 MaxValeof 未签名的已签名图

function getMaxValueOfUnsignedTypedArray(array: UnsignedTypedArray): number

获得MaxValeof 未签名的箭头构造器

function getMaxValueOfUnsignedTypedArrayConstructor(
  constructor: UnsignedTypedArrayConstructor
): number

发送器

type Listener<Args extends unknown[]> = (...args: Args) => void

class Emitter<
  EventToArgs extends Record<Event, unknown[]> = Record<
    string | number | symbol
  , unknown[]
  >
, Event extends string | number | symbol = keyof EventToArgs
> {
  get [Symbol.toStringTag](): string

  on<T extends Event>(event: T, listener: Listener<EventToArgs[T]>): () => void
  once<T extends Event>(event: T, listener: Listener<EventToArgs[T]>): () => void
  emit<T extends Event>(event: T, ...args: EventToArgs[T]): void
  removeAllListeners<T extends Event>(event: T): void
}

发电机

type Listener<Args extends unknown[], Yield, Next> = (...args: Args) =>
| void
| Generator<Yield, void, Next>

class GeneratorEmitter<
  EventToArgs extends Record<Event, unknown[]> = Record<
    string | number | symbol
  , unknown[]
  >
, Event extends string | number | symbol = keyof EventToArgs
, Yield = unknown
, Next = unknown
> {
  get [Symbol.toStringTag](): string

  on<T extends Event>(
    event: T
  , listener: Listener<EventToArgs[T], Yield, Next>
  ): () => void

  once<T extends Event>(
    event: T
  , listener: Listener<EventToArgs[T], Yield, Next>
  ): () => void

  emit<T extends Event>(
    event: T
  , ...args: EventToArgs[T]
  ): Generator<Yield, void, Next>

  removeAllListeners<T extends Event>(event: T): void
}

AsyncGenerator 编辑器

type Listener<Args extends unknown[], Yield, Next> = (...args: Args) =>
| void
| Generator<Yield, void, Next>
| AsyncGenerator<Yield, void, Next>

class AsyncGeneratorEmitter<
  EventToArgs extends Record<Event, unknown[]> = Record<
    string | number | symbol
  , unknown[]
  >
, Event extends string | number | symbol = keyof EventToArgs
, Yield = unknown
, Next = unknown
> {
  get [Symbol.toStringTag](): string

  on<T extends Event>(event: T
  , listener: Listener<EventToArgs[T], Yield, Next>
  ): () => void

  once<T extends Event>(
    event: T
  , listener: Listener<EventToArgs[T], Yield, Next>
  ): () => void

  emit<T extends Event>(
    event: T
  , ...args: EventToArgs[T]
  ): AsyncGenerator<Yield, void, Next>

  removeAllListeners<T extends Event>(event: T): void
}

大地图

class BigMap<K, V> implements Iterable<[K, V]> {
  get [Symbol.toStringTag](): string

  get size(): number

  set(key: K, value: V): void
  has(key: K): boolean
  get(key: K): V | undefined
  delete(key: K): boolean
  clear(): void

  entries(): IterableIterator<[K, V]>
  keys(): IterableIterator<K>
  values(): IterableIterator<V>
}

这个 Map 支持无限元素.

请注意: BigMap 无法保留元素的插入顺序.

// Map
const map = new Map()
for (let i = 0; i < 100_000_000; i++) {
  map.set(i, null) // RangeError
}
console.log('Never')

// BigMap
const { BigMap } = require('.')
const map = new BigMap()
for (let i = 0; i < 100_000_000; i++) {
  map.set(i, null)
}
console.log('Done')

大队

class BigSet<T> implements Iterable<T> {
  get [Symbol.toStringTag]: string

  get size(): number

  add(value: T): this
  has(value: T): boolean
  delete(value: T): boolean
  clear(): void

  values(): IterableIterator<T>
}

这个 Set 支持无限元素.

请注意: BigSet 无法保留元素的插入顺序.

// Set
const set = new Set()
for (let i = 0; i < 100_000_000; i++) {
  set.add(i) // RangeError
}
console.log('Never')

// BigSet
const set = new BigSet()
for (let i = 0; i < 100_000_000; i++) {
  set.add(i)
}
console.log('Done')

散列图

class HashMap<K, V, Hash = unknown> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(hash: (key: K) => Hash)

  set(key: K, value: V): this
  has(key: K): boolean
  get(key: K): V | undefined
  delete(key: K): boolean
  clear(): void
  values(): IterableIterator<V>
}

散装

class HashSet<V, Hash = unknown> implements Iterable<V> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(hash: (value: V) => Hash)

  add(value: V): this
  delete(value: V): boolean
  has(value: V): boolean
  get(value: V): V | undefined
  clear(): void
  keys(): IterableIterator<V>
  values(): IterableIterator<V>
}

半径

class LRUMap<K, V> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(limit: number)

  set(key: K, value: V): this
  has(key: K): boolean
  get(key: K): V | undefined
  delete(key: K): boolean
  clear(): void
}

可过期映射

class ExpirableMap<K, V> {
  get[Symbol.toStringTag](): string
  get size(): number

  constructor()

  set(key: K, value: V, timeToLive?: number = Infinity): this
  has(key: K): boolean
  get(key: K): V | undefined
  delete(key: K): boolean
  clear(): void
}

TLRUMAP (法语)

class TLRUMap<K, V> {
  get[Symbol.toStringTag](): string
  get size(): number

  constructor(limit: number)

  set(key: K, value: V, timeToLive?: number = Infinity): this
  has(key: K): boolean
  get(key: K): V | undefined
  delete(key: K): boolean
  clear(): void
}

队列

class Queue<T> {
  get [Symbol.toStringTag](): string
  get size(): number

  empty(): void
  enqueue(...items: T[]): void
  dequeue(): T | undefined

  // O(n)
  remove(item: T): void
}

唯一队列

class UniqueQueue<T> {
  get [Symbol.toStringTag](): string
  get size(): number

  empty(): void
  enqueue(...items: T[]): void
  dequeue(): T | undefined

  // Better than O(n)
  remove(item: T): void
}

三进制图

class TrieMap<K extends Iterable<T>, V, T = unknown> {
  get [Symbol.toStringTag](): string

  keys(): IterableIterator<T[]>
  values(): IterableIterator<V>
  entries(): IterableIterator<[key: T[], value: V]>

  set(key: K, value: V): this
  has(key: K): boolean
  get(key: K): V | undefined
  delete(key: K): boolean
}

请注意,您可能期望这一数据结构比 BigMap但它没有. 在V8中,它只能存储大约80%的数据 BigMap。 。 。 .

字符串图

class StringTrieMap<T> {
  get [Symbol.toStringTag](): string

  keys(): IterableIterator<string>
  values(): IterableIterator<T>
  entries(): IterableIterator<[key: string, value: T]>

  set(key: string, value: T): this
  has(key: string): boolean
  get(key: string): T | undefined
  delete(key: string): boolean
}

请注意,您可能期望这一数据结构比 BigMap但它没有. 在V8中,它只能存储大约80%的数据 BigMap。 。 。 .

半径

class RadixTree<K extends Iterable<T>, V, T = unknown> {
  get [Symbol.toStringTag](): string

  entries(): IterableIterator<[key: T[], value: V]>
  keys(): IterableIterator<T[]>
  values(): IterableIterator<V>

  set(key: K, value: V): this
  has(key: K): boolean
  get(key: K): V | undefined
  delete(key: K): boolean
}

请注意,您可能期望这一数据结构比 BigMap但它没有. 在V8中,它只能存储大约80%的数据 BigMap。 。 。 .

字符串RadixTree 键

class StringRadixTree<T> {
  get [Symbol.toStringTag](): string

  keys(): IterableIterator<string>
  values(): IterableIterator<T>
  entries(): IterableIterator<[key: string, value: T]>

  set(key: string, value: T): this
  has(key: string): boolean
  get(key: string): T | undefined
  delete(key: string): boolean
}

请注意,您可能期望这一数据结构比 BigMap但它没有. 在V8中,它只能存储大约80%的数据 BigMap。 。 。 .

动态串行阵列

class DynamicTypedArray<
  T extends TypedArrayConstructor
> implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get capacity(): number
  get length(): number
  readonly BYTES_PER_ELEMENT: number
  readonly growthFactor: number

  /**
   * `DynamicTypedArray` cannot respond to any operations on the internal array,
   * you must ensure that indexes accessed are less than the length of `DynamicTypedArray`.
   */
  get internalTypedArray(): TypedArrayOfConstructor<T>

  constructor(
    typedArrayConstructor: T
  , options?: {
      initialCapacity?: number = 0
      growthFactor?: number = 1.5
      fillValue?: number = 0
    }
  )

  values(): IterableIterator<number>

  set(index: number, value: number): void
  setValues(index: number, values: ArrayLike<number>): void

  get(index: number): number | undefined

  push(...values: number[]): void
  pop(): number | undefined

  clear(): void
  shrink(): void

  sort(compare?: (a: number, b: number) => number): void
}

这一实施适用于ES-2024之前的版本, 你可能更喜欢使用 ResizableTypedArray。 。 。 .

可调色板阵列

class ResizableTypedArray<T extends TypedArrayConstructor> {
  readonly maxCapacity: number
  readonly growthFactor: number
  readonly BYTES_PER_ELEMENT: number
  readonly internalTypedArray: TypedArrayOfConstructor<T>

  get [Symbol.toStringTag](): string
  get capacity(): number
  get length(): number

  constructor(
    typedArrayConstructor: T
  , options: {
      maxCapacity: number

      initialCapacity?: capacity = 0
      growthFactor?: number = 1.5
      fillValue?: number = 0
    }
  )

  set(index: number, value: number): void
  setValues(index: number, values: ArrayLike<number>): void

  get(index: number): number | undefined

  push(...values: number[]): void
  pop(): number | undefined

  clear(): void
  shrink(): void

  sort(compare?: (a: number, b: number) => number): void
}

这一实施基于可调整阵列缓冲器, eS2024号文件提出了这方面的支持.

排序的设置

class SortedSet<T> implements Iterable<T> {
  get [Symbol.toStringTag](): string

  constructor(compare: (a: T, b: T) => number)

  values(): IterableIterator<T>

  has(value: T): boolean
  add(value: T): void
  delete(value: T): void
}

断开组合

class DisjointSet {
  has(value: number): boolean
  sets(): number[][]

  makeSet(value: number): number
  union(a: number, b: number): void
  find(value: number): number
}

位集

位元组

class BitSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(bitsPerElement: number = 8)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void

  clone(): BitSet
}

由于JavaScript支持的数组长度, BitSet 无法支持非常大的值.

键入BitSet

class TypedBitSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get capacity(): number
  get size(): number

  constructor(array: UnsignedTypedArray)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

动态 Typed BitSet

class DynamicTypedBitSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get capacity(): number
  get size(): number

  constructor(array: array: DynamicTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

由于JavaScript支持的数组长度, DynamicTypedBitSit 无法支持非常大的值.

可调整的 Typed BitSet

class ResizableTypedBitSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: ResizableTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

由于JavaScript支持的数组长度, ResizableTypedBitSit 无法支持非常大的值.

组合

执行工作很多. 根据基准结果, TypedCleanSparseSet 这是最快的, 接下来是 TypedCleanSparseSetLite。 。 。 . 如果需要阵列调整大小, 选择 DynamicTypedCleanSparseSetLite 或者说 ResizableTypedCleanSparseSetLite。 。 。 .

组合

class SparseSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void

  clone(): SparseSet
}

清除分隔套件

class CleanSparseSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void

  clone(): CleanSparseSet
}

已键入SparseSet

class TypedSparseSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: UnsignedTypedArray<ArrayBuffer>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

已键入SparseSetLite

class TypedSparseSetLite implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: UnsignedTypedArray<ArrayBuffer>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

已键入的 CleanSparse 集

class TypedCleanSparseSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: UnsignedTypedArray<ArrayBuffer>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

已键入的 CleanSparseSetLite

class TypedCleanSparseSetLite implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: UnsignedTypedArray<ArrayBuffer>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

动态磁盘组合

class DynamicTypedSparseSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: DynamicTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

动态编程SparseSetLite

class DynamicTypedSparseSetLite implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: DynamicTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

动态 Typed 清除程序

class DynamicTypedCleanSparseSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: DynamicTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

动态 Typed 清理SparseetLite

class DynamicTypedCleanSparseSetLite implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: DynamicTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

可调整的 Typed 组合

class ResizableTypedSparseSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: ResizableTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

可缩放的 TypedSparseSetLite

class ResizableTypedSparseSetLite implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: ResizableTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

可调整的 Typed 清空相册

class ResizableTypedCleanSparseSet implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: ResizableTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

可缩放的 Typed 清空SparseSetLite

class ResizableTypedCleanSparseSetLite implements Iterable<number> {
  get [Symbol.toStringTag](): string
  get size(): number

  constructor(array: ResizableTypedArray<UnsignedTypedArrayConstructor>)

  values(): IterableIterator<number>

  has(value: number): boolean
  add(value: number): boolean
  delete(value: number): boolean

  clear(): void
}

映射图

执行工作很多. 根据基准结果, TypedCleanSparseMap 这是最快的, 接下来是 TypedCleanSparseMapLite。 。 。 . 如果需要阵列调整大小, 选择 DynamicTypedCleanSparseMapLite 或者说 ResizableTypedCleanSparseMapLite。 。 。 .

图像

class SparseMap<T> {
  get [Symbol.toStringTag](): string
  get size(): number

  readonly internalKeyArray: readonly number[]
  readonly internalValueArray: T[]

  entries(): IterableIterator<[key: number, value: T]>
  keys(): IterableIterator<number>
  values(): IterableIterator<T>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean
  get(key: number): T | undefined
  set(key: number, value: T): void
  delete(key: number): boolean

  clear(): void
}

清理图像

class CleanSparseMap<T> {
  get [Symbol.toStringTag](): string
  get size(): number

  readonly internalKeyArray: readonly number[]
  readonly internalValueArray: T[]

  entries(): IterableIterator<[key: number, value: T]>
  keys(): IterableIterator<number>
  values(): IterableIterator<T>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean
  get(key: number): T | undefined
  set(key: number, value: T): void
  delete(key: number): boolean

  clear(): void
}

键入Sparse映射

class TypedSparseMap<
  K extends UnsignedTypedArrayConstructor
, V extends TypedArrayConstructor
> {
  get [Symbol.toStringTag](): string
  get size(): number

  readonly internalKeyArray: TypedArrayOfConstructor<K, ArrayBuffer>
  readonly internalValueArray: TypedArrayOfConstructor<V, ArrayBuffer>

  constructor(
    keys: TypedArrayOfConstructor<K, ArrayBuffer>
  , values: TypedArrayOfConstructor<V, ArrayBuffer>
  )

  entries(): IterableIterator<[key: number, value: number]>
  keys(): IterableIterator<number>
  values(): IterableIterator<number>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean
  get(key: number): number | undefined
  set(key: number, value: number): void
  delete(key: number): boolean

  clear(): void
}

已键入SparseMapLite

class TypedSparseMapLite<
  K extends UnsignedTypedArrayConstructor
, V extends TypedArrayConstructor
> {
  get [Symbol.toStringTag](): string
  get size(): number

  readonly internalKeyArray: TypedArrayOfConstructor<K, ArrayBuffer>
  readonly internalValueArray: TypedArrayOfConstructor<V, ArrayBuffer>

  constructor(
    keys: TypedArrayOfConstructor<K, ArrayBuffer>
  , values: TypedArrayOfConstructor<V, ArrayBuffer>
  )

  entries(): IterableIterator<[key: number, value: number]>
  keys(): IterableIterator<number>
  values(): IterableIterator<number>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean 
  get(key: number): number | undefined
  set(key: number, value: number): void
  delete(key: number): boolean

  clear(): void
}

已键入的 CleanSparseMap

class TypedCleanSparseMap<
  K extends UnsignedTypedArrayConstructor
, V extends TypedArrayConstructor
> {
  get [Symbol.toStringTag](): string
  get size(): number

  readonly internalKeyArray: TypedArrayOfConstructor<K, ArrayBuffer>
  readonly internalValueArray: TypedArrayOfConstructor<V, ArrayBuffer>

  constructor(
    keys: TypedArrayOfConstructor<K, ArrayBuffer>
  , values: TypedArrayOfConstructor<V, ArrayBuffer>
  )

  entries(): IterableIterator<[key: number, value: number]>
  keys(): IterableIterator<number>
  values(): IterableIterator<number>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean
  get(key: number): number | undefined
  set(key: number, value: number): void
  delete(key: number): boolean

  clear(): void
}

已键入的 CleanSparseMapLite

class TypedCleanSparseMapLite<
  K extends UnsignedTypedArrayConstructor
, V extends TypedArrayConstructor
> {
  get [Symbol.toStringTag](): string
  get size(): number

  readonly internalKeyArray: TypedArrayOfConstructor<K, ArrayBuffer>
  readonly internalValueArray: TypedArrayOfConstructor<V, ArrayBuffer>

  constructor(
    keys: TypedArrayOfConstructor<K, ArrayBuffer>
  , values: TypedArrayOfConstructor<V, ArrayBuffer>
  )

  entries(): IterableIterator<[key: number, value: number]>
  keys(): IterableIterator<number>
  values(): IterableIterator<number>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean 
  get(key: number): number | undefined 
  set(key: number, value: number): void
  delete(key: number): boolean

  clear(): void
}

动态磁盘平面图

class DynamicTypedSparseMapLite<
  K extends UnsignedTypedArrayConstructor
, V extends TypedArrayConstructor
> {
  get [Symbol.toStringTag](): string
  get size(): number

  get internalKeyArray(): TypedArrayOfConstructor<K>
  get internalValueArray(): TypedArrayOfConstructor<V>

  constructor(
    keys: DynamicTypedArray<K>
  , values: DynamicTypedArray<V>
  )

  entries(): IterableIterator<[key: number, value: number]>
  keys(): IterableIterator<number>
  values(): IterableIterator<number>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean
  get(key: number): number | undefined
  set(key: number, value: number): void
  delete(key: number): boolean

  clear(): void
}

动态Typed 清理图

class DynamicTypedCleanSparseMapLite<
  K extends UnsignedTypedArrayConstructor
, V extends TypedArrayConstructor
> {
  get [Symbol.toStringTag](): string
  get size(): number

  get internalKeyArray(): TypedArrayOfConstructor<K>
  get internalValueArray(): TypedArrayOfConstructor<V>

  constructor(
    keys: DynamicTypedArray<K>
  , values: DynamicTypedArray<V>
  )

  entries(): IterableIterator<[key: number, value: number]>
  keys(): IterableIterator<number>
  values(): IterableIterator<number>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean
  get(key: number): number | undefined
  set(key: number, value: number): void
  delete(key: number): boolean

  clear(): void
}

可缩放的 TypedSparse 地图

class ResizableTypedSparseMapLite<
  K extends UnsignedTypedArrayConstructor
, V extends TypedArrayConstructor
> {
  get [Symbol.toStringTag](): string
  get size(): number

  readonly internalKeyArray: TypedArrayOfConstructor<K>
  readonly internalValueArray: TypedArrayOfConstructor<V>

  constructor(
    keys: ResizableTypedArray<K>
  , values: ResizableTypedArray<V>
  )

  entries(): IterableIterator<[key: number, value: number]>
  keys(): IterableIterator<number>
  values(): IterableIterator<number>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean
  get(key: number): number | undefined
  set(key: number, value: number): void
  delete(key: number): boolean

  clear(): void
}

可缩放的 Typed 清除地图

class ResizableTypedCleanSparseMapLite<
  K extends UnsignedTypedArrayConstructor
, V extends TypedArrayConstructor
> {
  get [Symbol.toStringTag](): string
  get size(): number

  readonly internalKeyArray: TypedArrayOfConstructor<K>
  readonly internalValueArray: TypedArrayOfConstructor<V>

  constructor(
    keys: ResizableTypedArray<K>
  , values: ResizableTypedArray<V>
  )

  entries(): IterableIterator<[key: number, value: number]>
  keys(): IterableIterator<number>
  values(): IterableIterator<number>

  getInternalIndexOfKey(key: number): number | undefined

  has(key: number): boolean
  get(key: number): number | undefined
  set(key: number, value: number): void
  delete(key: number): boolean

  clear(): void
}

版本与发布记录

@blackglory/structures 共发布 112 个版本,首次发布于 2020/12/19;过去 12 个月发布了 9 个版本。

版本发布日期距今
0.15.4latest2026/10/081 个月前
0.15.32026/10/081 个月前
0.15.22026/10/071 个月前
0.15.12026/10/071 个月前
0.15.02026/10/061 个月前
0.14.152026/05/245 个月前

关于 @blackglory/structures 的常见问题

@blackglory/structures 是什么?

共同结构.

如何安装 @blackglory/structures?

在项目目录运行 npm install @blackglory/structures,或使用 pnpm add / yarn add / bun add。

@blackglory/structures 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@blackglory/structures 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@blackglory/structures 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@blackglory/structures 可以商用吗?

@blackglory/structures 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@blackglory/structures 的下载量有多少?

根据 npm 官方下载统计,@blackglory/structures 在 2026/10/09 – 2026/11/07 这 30 天内被下载 22,023 次,日均约 734 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@blackglory/structures 还在维护吗?

最新版本 0.15.4 发布于 2026/10/08(1 个月前);至今共发布 112 个版本,其中过去 12 个月发布了 9 个;首次发布于 2020/12/19。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。