Add a faster delete-duplicates function
Which is useful when deleting duplicates from large lists.
This commit is contained in:
parent
4a9d45aa16
commit
6cd3541d1a
1 changed files with 23 additions and 1 deletions
|
|
@ -33,7 +33,9 @@
|
|||
|
||||
chunk
|
||||
chunk!
|
||||
chunk-for-each!))
|
||||
chunk-for-each!
|
||||
|
||||
delete-duplicates/sort!))
|
||||
|
||||
(define (call-with-time-logging action thunk)
|
||||
(simple-format #t "debug: Starting ~A\n" action)
|
||||
|
|
@ -202,3 +204,23 @@
|
|||
(do-one-iteration lsts)))
|
||||
|
||||
#t)
|
||||
|
||||
(define (delete-duplicates/sort! unsorted-lst less)
|
||||
(if (null? unsorted-lst)
|
||||
unsorted-lst
|
||||
(let ((sorted-lst (sort! unsorted-lst less)))
|
||||
|
||||
(let loop ((lst (cdr sorted-lst))
|
||||
(last-element (car sorted-lst))
|
||||
(result (list (car sorted-lst))))
|
||||
(if (null? lst)
|
||||
result
|
||||
(let ((current-element (car lst)))
|
||||
(if (eq? current-element last-element)
|
||||
(loop (cdr lst)
|
||||
last-element
|
||||
result)
|
||||
(loop (cdr lst)
|
||||
current-element
|
||||
(cons current-element
|
||||
result)))))))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue