pitchart/collection

一个具有函数能力的简单不可变集合库

v1.3.0 2017-02-26 14:55 UTC

This package is auto-updated.

Last update: 2024-09-29 04:20:11 UTC


README

一个具有流畅API的简单不可变集合库。

License: MIT Latest Stable Version Build Status Scrutinizer Code Quality Code Coverage

安装

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)。有关更多信息,请参阅 许可文件