public function random($n = 1)
    {
        self::mustBeInteger($n, 'Number of random items');

        if ($n instanceof N) {
            $n = $n->int;
        }

        if (!is_numeric($n) || $n < 1) {
            throw new \InvalidArgumentException(
                'Random items amount must be an integer greater '
                .'than or equal one.'
            );
        }

        if ($n > $this->count()) {
            throw new \RuntimeException(
                'Cannot take more random elements than amount '
                .'contained into the collection.'
            );
        }

        $mix = array_rand($this->value, $n);

        if (is_integer($mix)) {
            return $this->value[$mix];
        }

        $out = new self();

        foreach ($mix as $idx) {
            $out->add($this->value[$idx]);
        }

        return $out;
    }