malarzm/collections

Doctrine Collection 接口的多种实现

1.0.0 2016-12-10 13:57 UTC

This package is auto-updated.

Last update: 2024-09-12 03:41:07 UTC


README

Build Status

Doctrine Collection 接口的多种实现,允许您启动自己的开发。每次接口或抽象类需要您实现 compare 方法时,它都需要一个标准的 PHP 比较函数,该函数返回一个整数,小于、等于或大于零,如果第一个参数被认为分别小于、等于或大于第二个参数。

此库具有以下特点:

SortedCollection

确保始终排序的集合,默认使用 uasort,但可以通过构造函数参数进行更改。示例用法

class SortedCollection extends Malarzm\Collections\SortedCollection
{
    public function compare($a, $b)
    {
        // ...
    }
}

$coll = new SortedIntCollection([], 'usort');

ObjectSet

确保在任何时候只包含给定对象的单个实例的集合,从而提供非常高效的 contains 实现。如果对象已在集合中,则添加/设置调用为 NOP。

可直接使用。

Set

ObjectSet 更通用的版本,它基于自定义比较函数而不是对象哈希,实际上允许您存储任何类型的值。如果值已在集合中,则添加/设置调用为 NOP。

class Set extends Malarzm\Collections\Set
{
    public function compare($a, $b)
    {
        // ...
    }
}

Diffable

允许您跟踪在快照(第一个是在构造集合后立即进行的,接下来是在开发人员调用 ->snapshot() 时进行的)之间所做的更改的集合。使用 ->getAddedElements()->getRemovedElements() 分别获取新元素和不再存在的元素。

class Diffable extends Malarzm\Collections\Diffable
{
    public function compare($a, $b)
    {
        // ...
    }
}

该库还提供了 Malarzm\Collections\DiffableCollection 接口,它可以由 Malarzm\Collections\Mixin\Diffable 特性支持,以供您使用。

ListArray

确保存储的元素始终以列表(由连续数字索引的数组)的形式存储的集合。在尝试写入无效索引时抛出异常。

可直接使用。

SortedList

扩展了 ListArray 的实现,它还保持元素排序,从而提供更有效的 containsindexOfremoveElement 实现。

class SortedList extends Malarzm\Collections\SortedList
{
    public function compare($a, $b)
    {
        // ...
    }
}