我知道如何让一个函数删除所有重复项,但这不是我的问题。我想保留所有独特的/没有重复的东西。删除所有非重复项(球拍)
这将是特别好,如果有人可以在他们的反应使用抽象/高阶函数
所以这里有几个例子;
'(1 1 1 2 2 2 3 4 5) - >'(3 4 5)
'(1 1 1 2 2 2) - >空
'(2 3 4) - >'(2 3 4)
我知道如何让一个函数删除所有重复项,但这不是我的问题。我想保留所有独特的/没有重复的东西。删除所有非重复项(球拍)
这将是特别好,如果有人可以在他们的反应使用抽象/高阶函数
所以这里有几个例子;
'(1 1 1 2 2 2 3 4 5) - >'(3 4 5)
'(1 1 1 2 2 2) - >空
'(2 3 4) - >'(2 3 4)
这是在Racket中使用bagify
和iterations and comprehensions的惯用的O(n)
解决方案。诀窍是计数多少次在那里的每一个元素,而只服用那些只有一个:
(define (bagify lst)
(foldl (lambda (key ht)
(hash-update ht key add1 0))
#hash() lst))
(define (non-dups lst)
(for/list ([key+value (in-hash-pairs (bagify lst))]
#:when (= (cdr key+value) 1))
(car key+value)))
例如:
(non-dups '(1 1 1 2 2 2 3 4 5))
=> '(3 4 5)
(non-dups '(1 1 1 2 2 2))
=> '()
(non-dups '(2 3 4))
=> '(2 3 4)
@FateKyougo做了任何答案可以帮助你解决问题吗?请不要忘记给我们一些反馈;) –
#lang racket
(define (elements xs)
(set->list (list->set xs)))
(define (duplicates xs)
(elements
(for/fold ([xs xs]) ([u (elements xs)])
(remove u xs))))
(define (uniques xs)
(remove* (duplicates xs) xs))
(define (remove-duplicates xs)
(remove* (duplicates xs) xs))
(define (remove-non-duplicates xs)
(remove* (uniques xs) xs))
(define xs '(1 1 1 2 3 4 4))
(uniques xs)
(duplicates xs)
(remove-duplicates xs)
(remove-non-duplicates xs)
输出:
'(2 3)
'(4 1)
'(2 3)
'(1 1 1 4 4)
复制http://stackoverflow.com/questions/21298989/how-to-remove-all-the-duplicates-in-a-list-using-scheme-only-abstract-list-func – soegaard
@soegaard不是重复 –
http://stackoverflow.com/questions/5751559/how-to-remove-non-duplicate-elements-from-a-list-in-scheme – soegaard