A PHP 集合(累积)框架。
Requires
- php: ~8.0 || ~8.1 || ~8.2
- jetbrains/phpstorm-attributes: 1.0
Requires (Dev)
- doctrine/instantiator: ^1.3.1
- ergebnis/phpstan-rules: ^1.0.0
- phpstan/phpstan: ^1.9.17
- phpstan/phpstan-deprecation-rules: ^1.1.1
- phpstan/phpstan-strict-rules: ^1.4.5
- phpunit/phpunit: ^9.6.3
- rector/rector: ~0.15.13
README
开发发生在 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严格比较的集合实现。