jcstrandburg/demeter

v0.8 2018-11-04 22:17 UTC

This package is auto-updated.

Last update: 2024-09-05 19:29:58 UTC


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::constant
  • Lambda::toArray
  • Lambda::getGroupKey
  • Sequence::zip
  • Sequence::chunk
  • Sequence::join
  • Sequence::implode

0.5

更改

  • 破坏性更改:HashSet 的行为现在像是一个真正的集合(使用哈希对桶进行散列,但不进行相等比较)
  • 破坏性更改:将 Sequence 转换为接口,现有实现成为 LazySequence
  • 破坏性更改:将 Collection 转换为接口,现有实现成为 ArrayCollection
  • 破坏性更改:将 Dictionary 转换为接口,现有实现成为 ArrayDictionary
  • 破坏性更改:之前返回 HashSet 的函数现在返回 Set

新增

  • 引入 Set 接口,HashSet 实现该接口
  • Sequence::exceptSequence::intersect
  • Lambda 工具类
  • dictionaryset 工厂函数

0.4

新增

  • HashMap::addMany
  • HashMap::removeMany
  • Sequence::toDictionary
  • Dictionary

0.3

更改

  • sequencecollect 现在将返回其参数未修改的版本,如果它已经是正确的类型

新增

  • HashSet
  • Sequence::asSet
  • Sequence::first
  • Sequence::firstOrNull
  • Sequence::last
  • Sequence::lastOrNull
  • Sequence::single
  • Sequence::singleOrNull

0.2

新增

  • Sequence::groupBy
  • GroupedCollection
  • Grouping

0.1

新增

  • Sequence
  • Collection
  • 各种工具函数
  • LazyRewindableIterator
  • MappedIterator
  • SkipWhileIterator
  • TakeWhileIterator

许可证

本项目使用MIT许可证 - 有关详细信息,请参阅LICENSE.md文件