jcstrandburg / demeter
集合库
v0.8
2018-11-04 22:17 UTC
Requires
- php: ^7.0
- jcstrandburg/extension-methods: ^1.1
Requires (Dev)
- phpunit/phpunit: ^7.3
README
这个库提供了一组不可变集合类,允许以一致、面向对象、流畅的方式操作数据集合。它主要受到C#中的LINQ和Java Stream API的启发。
安装
composer require jcstrandburg\demeter
用法
纯PHP
$x = array_slice( array_map( function ($x) {return $x * 2;}, array_filter([1, 2, 3, 4, 5], function ($x) {return $x % 2 == 1;})), 0, 2);
使用Demeter
use function Jcstrandburg\Demeter\sequence; use Jcstrandburg\Demeter\Lambda; $x = sequence([1, 2, 3, 4, 5]) ->filter(Lambda::isOdd()) ->map(Lambda::multiplyBy(2)) ->take(2);
特性
版本历史
未发布
0.8
新增
Extensions静态类以支持扩展方法
0.7
变更
- 所有集合类现在实现
IteratorAggregate而不是扩展IteratorIterator GroupedCollection::getGroupKeys现在返回一个Collection而不是一个数组- 现在可以安全地对同一个
Sequence或其派生进行并发迭代。
例如,如果 $x = sequence([1,2,3,4]);
之前: $x->zip($x->map(Lambda::plus(1)), Lambda::add())->toArray() == [3,6]
现在: $x->zip($x->map(Lambda::plus(1)), Lambda::add())->toArray() == [3,5,7,9]
移除
LazyRewindableIterator已被内部实现替换
新增
as_iterator工具函数
弃用
as_traversable- 使用as_iterator代替
0.6
修复
- 从
ArrayGroupedCollection调用父构造函数
更改
- 破坏性更改:将
GroupedCollection转换为接口,现有实现成为ArrayGroupedCollection - 破坏性更改:将
Grouping转换为接口,现有实现成为ArrayGrouping - 使
Collection扩展Countable xrange现在返回一个Sequence
新增
Lambda::constantLambda::toArrayLambda::getGroupKeySequence::zipSequence::chunkSequence::joinSequence::implode
0.5
更改
- 破坏性更改:
HashSet的行为现在像是一个真正的集合(使用哈希对桶进行散列,但不进行相等比较) - 破坏性更改:将
Sequence转换为接口,现有实现成为LazySequence - 破坏性更改:将
Collection转换为接口,现有实现成为ArrayCollection - 破坏性更改:将
Dictionary转换为接口,现有实现成为ArrayDictionary - 破坏性更改:之前返回
HashSet的函数现在返回Set
新增
- 引入
Set接口,HashSet实现该接口 Sequence::except和Sequence::intersectLambda工具类dictionary和set工厂函数
0.4
新增
HashMap::addManyHashMap::removeManySequence::toDictionaryDictionary
0.3
更改
sequence和collect现在将返回其参数未修改的版本,如果它已经是正确的类型
新增
HashSetSequence::asSetSequence::firstSequence::firstOrNullSequence::lastSequence::lastOrNullSequence::singleSequence::singleOrNull
0.2
新增
Sequence::groupByGroupedCollectionGrouping
0.1
新增
SequenceCollection- 各种工具函数
LazyRewindableIteratorMappedIteratorSkipWhileIteratorTakeWhileIterator
许可证
本项目使用MIT许可证 - 有关详细信息,请参阅LICENSE.md文件