(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
equalsdel 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).
valuesLos valores a aƱadir a la secuencia.
No se retorna 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);
?>Resultado del ejemplo anterior es 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);
?>Resultado del ejemplo anterior es 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)
}
}