public function except(ArrayBase $comparedata)
    {
        $cmpvalue = function($v1, $v2) { return $v1==$v2 ? 0 : ($v1>$v2 ? 1 : -1); };
        $collection = $this->newInstance();

        $temp1 = array_udiff($this->getData(), $comparedata->getData(), $cmpvalue);
        $temp2 = array_udiff($comparedata->getData(), $this->getData(), $cmpvalue);
        $temp = array_merge($temp1, $temp2);
        unset($temp1, $temp2);

        $collection->setData($temp);
        unset($temp);
        return $collection;
    }