emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 1ca93e0: lisp/subr.el (delete-dups): Avoid nreverse


From: Oleh Krehel
Subject: [Emacs-diffs] master 1ca93e0: lisp/subr.el (delete-dups): Avoid nreverse.
Date: Wed, 06 May 2015 19:37:39 +0000

branch: master
commit 1ca93e01841975dab67fbc0f4cb92aff94a654d7
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    lisp/subr.el (delete-dups): Avoid nreverse.
---
 lisp/subr.el |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/lisp/subr.el b/lisp/subr.el
index a32fb96..ce9b44c 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -419,12 +419,15 @@ 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))))
+            (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)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]