public function difference($sequence)
{
if ($sequence instanceof Set) {
$result = new Set();
$result->array = array_diff_key($this->array, $sequence->array);
return $result;
}
args\expects(args\traversable, $sequence);
$result = new Set();
$intersection = $this->intersection($sequence);
foreach ($this->array as $element) {
$elementKey = static::getElementKey($element);
if (!isset($intersection->array[$elementKey])) {
$result->array[$elementKey] = $element;
}
}
return $result;
}