pitchart / collection
一个具有函数能力的简单不可变集合库
v1.3.0
2017-02-26 14:55 UTC
Requires
- php: >=5.5
Requires (Dev)
- phpmd/phpmd: ^2.4
- phpunit/phpunit: ^5.5
- sebastian/phpcpd: ^2.0
- squizlabs/php_codesniffer: ^2.7
This package is auto-updated.
Last update: 2024-09-29 04:20:11 UTC
README
一个具有流畅API的简单不可变集合库。
安装
composer require pitchart/collection
用法
使用 Collection 类操作数组数据
use Pitchart\Collection\Collection; $numbers = Collection::from([1, 2, 3, 4]); $plusOneNumbers = $numbers->map(function ($item) { return $item + 1; }); $evenNumbers = $plusOneNumbers->filter(function ($item) { return $item % 2 == 0; }); $total = $evenNumbers->reduce(function ($accumulator, $item) { return $accumulator + $item; }, 0);
集合管道
集合管道是一种编程模式,其中将某些计算组织为一系列操作,这些操作通过将一个操作的结果作为集合传递给下一个操作来组合。 Martin Fowler
此库专为集合管道使用而设计,因为它提供了一套常见的集合操作。
前面的示例可以重写为
$total = Collection::from([1, 2, 3, 4]) ->map(function ($item) { return $item + 1; }) ->filter(function ($item) { return $item % 2 == 0; }) ->reduce(function ($accumulator, $item) { return $accumulator + $item; }, 0);
利用生成器加速操作
如果您需要操作大量数据或减少重中间转换的内存影响,可以使用 GeneratorCollection 类
use Pitchart\Collection\GeneratorCollection; $collection = Collection::from($heavyFolderList) ->map(function ($folder) { return loadContentFromFilesInFolder($folder); }) ->filter(function ($content) { return lotsOfRegexpContentFiltering($content); }) ->reduce(function ($accumulator, $content) { return $accumulator.retrievePartsToCollect($content); }, '');
由于生成器只能遍历一次,结果可以持久化到经典集合中,用作多次转换的数据源
/** @var Collection $reusableCollection */ $reusableCollection = $generatorCollection->persist();
函数助手
此包提供函数助手以使用关注操作的集合管道。
use function Pitchart\Collection\Helpers\map; map([1, 2, 3, 4], function ($item) { return $item + 1; }) ->filter(function ($item) { return $item % 2 == 0; });
您还可以使用它们对任何可迭代数据(例如数组或可遍历对象)执行操作,具有一致的API。
测试
make test
许可
MIT 许可证(MIT)。有关更多信息,请参阅 许可文件。