Add unique collections

master 3.1.0
Julien Rosset 2 years ago
parent fe6d9dbaaf
commit 22cc1b439f

@ -0,0 +1,36 @@
<?php
namespace jrosset\Collections;
/**
* Implementation for unique collection
*
* @psalm-template TKey of array-key
* @template-covariant TValue
* @template-extends ImmutableCollection<TKey, TValue>
*/
trait TUniqueValues {
/**
* @inheritDoc
*/
protected function _set (int|string $key, mixed $value): self {
if ($this->contains($value)) {
return $this;
}
$this->elements[$this->_normalizeKey($key)] = $value;
return $this;
}
/**
* @inheritDoc
*/
protected function _add (mixed ...$values): self {
foreach ($values as $value) {
if ($this->contains($value)) {
continue;
}
$this->elements[] = $value;
}
return $this;
}
}

@ -0,0 +1,15 @@
<?php
namespace jrosset\Collections;
/**
* A collection with unique values
*
* @psalm-template TKey of array-key
* @template-covariant TValue
* @template-extends Collection<TKey, TValue>
* @template-extends TUniqueValues<TKey, TValue>
*/
class UniqueCollection extends Collection {
use TUniqueValues;
}

@ -0,0 +1,15 @@
<?php
namespace jrosset\Collections;
/**
* An immutable collection with unique values
*
* @psalm-template TKey of array-key
* @template-covariant TValue
* @template-extends ImmutableCollection<TKey, TValue>
* @template-extends TUniqueValues<TKey, TValue>
*/
class UniqueImmutableCollection extends ImmutableCollection {
use TUniqueValues;
}
Loading…
Cancel
Save