A PHP 集合(累积)框架。

0.14.0 2023-02-11 22:59 UTC

README

Tests Latest Stable Version Total Downloads License PHP Version Require

开发发生在 AccumulatePHP-src

AccumulatePHP

一个受Java集合框架启发的PHP集合库。

这个库是做什么用的

使用更精细的数据结构可以比使用数组(列表和关联数组)更安全、更高效的代码。例如,TreeMap可以保证在O(log n)时间内可搜索。此外,非标量键可以作为映射的键。

静态分析

AccumulatePHP通过PHPStan的第9级提供了一等静态分析支持。

安装

composer require nsilbernagel/accumulatephp

使用示例

ArraySeries和HashMap是您将使用的主要两种数据结构。以下是使用它们的示例。

ArraySeries

// create empty list
$series = ArraySeries::new();

// create list with elements 1,2 and 3
$series = ArraySeries::of(1,2,3);

// add 4
$series->add(4);

// remove 4th element
$series->remove(3);

// filter list for event number
$evenNumbers = $series->filter(fn(int $number) => $number % 2 === 0)

// map list, multiplay all elements by 2
$multiplied = $series->map(fn(int $number) => $number*2)

有关ArraySeries和其他可用的系列的完整概述,请参阅src/series下的源文件。

HashMap

// create empty map
$map = Hashmap::new();

// create map with initial entries
$map = Hashmap::of(
    Entry::of('example', 'code'),
    Entry::of('is', 'fun'),
);

// add entry
$map->put('isnt', 'it?');

// remove entry via key
$map->remove('isnt');

HashMap可以使用任何类型的键,但不能是资源或数组。类可以实现Hashable接口以确定其哈希函数和相等性定义。您可以参考https://www.baeldung.com/java-equals-hashcode-contracts以了解更多关于equals和hashCode及其契约的信息。

辅助函数

AccumulatePHP提供了创建累积的辅助方法。

$series = mutableSeriesOf(1,2,3);

$map = mutableMapOf(Entry::of('hello', 'world'));

$set = mutableSetOf(1,2,3);

结构

累积

此库的基本接口。项目(集合)的累积。可迭代的和可计数的。

有序累积

具有定义顺序或元素顺序的累积。这种顺序由实现决定。它可能是某些元素的插入顺序,也可能是其他元素的自然顺序。

系列

允许通过索引、映射、过滤等获取的有序累积。

可变系列

与系列类似,但具有突变方法。

ArraySeries

可变系列的基本数组实现

映射

一个只读键值映射。可以从和转换为关联数组,在转换过程中将丢失任何非标量键。在条目对象上可迭代。实现决定支持哪些类型的键。强烈建议只为映射使用相同类型的键(可以通过静态分析工具强制执行)。

条目

映射的条目。

有序映射

具有定义键顺序的映射。

可变映射

与映射类似,但具有突变方法。

有序映射

具有定义键顺序的映射。

HashMap

类似于散列表的映射实现。

TreeMap

红黑树有序映射实现。默认情况下,键按其自然顺序(空间比较运算符)排序。

集合

每个元素可能只存在一次的累积。

可变集合

与集合类似,但具有突变方法。

有序集合

具有定义键顺序的集合。

HashSet

集合的哈希实现。在后台使用HashMap。

StrictSet

使用PHP严格比较的集合实现。