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!
|
chunk!
|
||||||
chunk-for-each!))
|
chunk-for-each!
|
||||||
|
|
||||||
|
delete-duplicates/sort!))
|
||||||
|
|
||||||
(define (call-with-time-logging action thunk)
|
(define (call-with-time-logging action thunk)
|
||||||
(simple-format #t "debug: Starting ~A\n" action)
|
(simple-format #t "debug: Starting ~A\n" action)
|
||||||
|
|
@ -202,3 +204,23 @@
|
||||||
(do-one-iteration lsts)))
|
(do-one-iteration lsts)))
|
||||||
|
|
||||||
#t)
|
#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