function pluck($key, $index = null) {
        $data = array();
        $i = 0;
        
        foreach($this->data as $v) {
            $k = ($index ?
                    (\is_array($v) ?
                        (\array_key_exists($index, $v) ? $v[$index] : $i)
                    : (\is_object($v) ?
                            (\property_exists($v, $index) ?
                                $v->$index : $i)
                        : $i))
                    : $i);
            
            if(\is_array($v) && \array_key_exists($key, $v)) {
                $data[$k] = $v[$key];
            } elseif(\is_object($v) && \property_exists($v, $key)) {
                $data[$k] = $v->$key;
            }
            
            $i++;
        }
        
        return (new self($data));
    }