(PECL ds >= 1.0.0)
Ds\Set::add — Añade valores a la secuencia
Añade todos los valores dados al conjunto que no hayan sido ya añadidos.
Nota:
Los valores de tipo object son soportados. Si un objeto implementa Ds\Hashable, la igualdad será determinada por la función
equals
del objeto. Si un objeto no implementa Ds\Hashable, los objetos deben ser referencias a la misma instancia para ser considerados iguales.
Todas las comparaciones son estrictas (tipo y valor).
values
Los valores a añadir a la secuencia.
No devuelve ningún valor.
Ejemplo #1 Ejemplo de Ds\Set::add() utilizando enteros
<?php
$set = new \Ds\Set();
$set->add(1);
$set->add(1);
$set->add(2);
$set->add(3);
// Las comparaciones estrictas no tratarían estos valores de la misma manera que int(1)
$set->add("1");
$set->add(true);
var_dump($set);
?>
El resultado del ejemplo sería algo similar a:
object(Ds\Set)#1 (5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> string(1) "1" [4]=> bool(true) }
Ejemplo #2 Ejemplo de Ds\Set::add() utilizando objetos
<?php
class HashableObject implements \Ds\Hashable
{
/**
* Un valor arbitrario a utilizar como valor de hash. No define la igualdad.
*/
private $value;
public function __construct($value)
{
$this->value = $value;
}
public function hash()
{
return $this->value;
}
public function equals($obj): bool
{
return $this->value === $obj->value;
}
}
$set = new \Ds\Set();
$obj = new \ArrayIterator([]);
// Añadir la misma instancia varias veces solo añadirá la primera.
$set->add($obj);
$set->add($obj);
// Añadir varias instancias del mismo objeto añadirá todas las instancias.
$set->add(new \stdClass());
$set->add(new \stdClass());
// Añadir varias instancias de objetos hashables iguales solo añadirá la primera.
$set->add(new \HashableObject(1));
$set->add(new \HashableObject(1));
$set->add(new \HashableObject(2));
$set->add(new \HashableObject(2));
var_dump($set);
?>
El resultado del ejemplo sería algo similar a:
object(Ds\Set)#1 (5) { [0]=> object(ArrayIterator)#2 (1) { ["storage":"ArrayIterator":private]=> array(0) { } } [1]=> object(stdClass)#3 (0) { } [2]=> object(stdClass)#4 (0) { } [3]=> object(HashableObject)#5 (1) { ["value":"HashableObject":private]=> int(1) } [4]=> object(HashableObject)#6 (1) { ["value":"HashableObject":private]=> int(2) } }