mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 09:14:18 +00:00
* lisp/subr.el (delete-dups): Pre-size the hashtable.
This commit is contained in:
parent
bceffdb379
commit
d45fd912eb
1 changed files with 15 additions and 15 deletions
30
lisp/subr.el
30
lisp/subr.el
|
|
@ -417,21 +417,21 @@ If N is omitted or nil, remove the last element."
|
|||
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))
|
||||
(tail list)
|
||||
elt retail)
|
||||
(puthash (car list) t hash)
|
||||
(while (setq retail (cdr tail))
|
||||
(setq elt (car retail))
|
||||
(if (gethash elt hash)
|
||||
(setcdr tail (cdr retail))
|
||||
(puthash elt t hash))
|
||||
(setq tail retail)))
|
||||
(let ((tail list))
|
||||
(while tail
|
||||
(setcdr tail (delete (car tail) (cdr tail)))
|
||||
(setq tail (cdr tail)))))
|
||||
(let ((l (length list)))
|
||||
(if (> l 100)
|
||||
(let ((hash (make-hash-table :test #'equal :size l))
|
||||
(tail list) retail)
|
||||
(puthash (car list) t hash)
|
||||
(while (setq retail (cdr tail))
|
||||
(let ((elt (car retail)))
|
||||
(if (gethash elt hash)
|
||||
(setcdr tail (cdr retail))
|
||||
(puthash elt t hash)))
|
||||
(setq tail retail)))
|
||||
(let ((tail list))
|
||||
(while tail
|
||||
(setcdr tail (delete (car tail) (cdr tail)))
|
||||
(setq tail (cdr tail))))))
|
||||
list)
|
||||
|
||||
;; See http://lists.gnu.org/archive/html/emacs-devel/2013-05/msg00204.html
|
||||
|
|
|
|||
Loading…
Reference in a new issue