From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Oleh Krehel Newsgroups: gmane.emacs.devel Subject: Re: What to do for faster `remove-duplicates'? Date: Wed, 06 May 2015 19:54:49 +0200 Message-ID: <87r3qtzj4m.fsf@gmail.com> References: <87383atb2p.fsf@gmail.com> <873839ltoa.fsf@gmail.com> <87bnhxeh4j.fsf@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1430935278 17180 80.91.229.3 (6 May 2015 18:01:18 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 6 May 2015 18:01:18 +0000 (UTC) Cc: emacs-devel@gnu.org To: Thierry Volpiatto Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed May 06 20:01:14 2015 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Yq3dA-0005uo-Ho for ged-emacs-devel@m.gmane.org; Wed, 06 May 2015 20:01:12 +0200 Original-Received: from localhost ([::1]:46608 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yq3dA-00059o-4q for ged-emacs-devel@m.gmane.org; Wed, 06 May 2015 14:01:12 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:56416) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yq3d1-00059Y-Th for emacs-devel@gnu.org; Wed, 06 May 2015 14:01:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yq3cw-0005aY-7x for emacs-devel@gnu.org; Wed, 06 May 2015 14:01:03 -0400 Original-Received: from mail-wi0-x22e.google.com ([2a00:1450:400c:c05::22e]:35718) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yq3cv-0005a6-GC for emacs-devel@gnu.org; Wed, 06 May 2015 14:00:57 -0400 Original-Received: by widdi4 with SMTP id di4so212093865wid.0 for ; Wed, 06 May 2015 11:00:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-type; bh=K/qjOjEvKUMNJRWrSlyjh6iUBs4+gCBdtcBP1INrCfQ=; b=PGj4BPJmHi5ARADUN/DK/SJigc3646u2a1thbLrtWA7UlFQ8OF0tt9F/0jKoiweLCp kxuiEf1LPXuEePJ2hof7WiEYyOPnbgfeYAP6gZYLYsSG8Fi0P9Obh+mTjnAvRJg1ATV0 /1h9vi3Rfmj4EDn/CjxJhVt6jBcHbOEHoD+2lkwOr/wX9JPWHfkuxCZ4lQLRlSp6n9fJ acCDLNiVnUeDTkHv/va701exyZDglukpTtBR2baWa7atyDnxthj4ptwq5xo/s7gXi0kR PV3hx6/uT62t6cECn8sQdpMUVXhvPqnPPiCKqCrCmQqa2oBSl9ObUO+fso+F/BM5JJE+ fYaA== X-Received: by 10.181.13.198 with SMTP id fa6mr16274052wid.41.1430935256730; Wed, 06 May 2015 11:00:56 -0700 (PDT) Original-Received: from firefly (dyn069045.nbw.tue.nl. [131.155.69.45]) by mx.google.com with ESMTPSA id di7sm3230611wib.23.2015.05.06.11.00.55 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Wed, 06 May 2015 11:00:55 -0700 (PDT) In-Reply-To: <87bnhxeh4j.fsf@gmail.com> (Thierry Volpiatto's message of "Wed, 06 May 2015 19:43:40 +0200") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c05::22e X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:186290 Archived-At: Thierry Volpiatto writes: > Stefan Monnier writes: > >> Looks good, please install. > > Not so good as now it is no more destructive for a seq > 100. Should I make it destructive, like this? (defun delete-dups (list) "Destructively remove `equal' duplicates from LIST. Store the result in LIST and return it. LIST must be a proper list. Of several `equal' occurrences of an element in LIST, the first one is kept." (if (> (length list) 100) (let ((hash (make-hash-table :test #'equal)) res) (dolist (elt list) (unless (gethash elt hash) (puthash elt elt hash) (push elt res))) (setcdr list (cdr (nreverse res)))) (let ((tail list)) (while tail (setcdr tail (delete (car tail) (cdr tail))) (setq tail (cdr tail))))) list) Oleh