给定两个由以下格式的几个“对象”组成的列表:(名称id)如何从第一个列表中获取第二个不匹配的对象?
预期产量:
(去掉-…
这是两个hacky解决方案。
(defun remove-duplicates-by-name (l to-remove) ;; low performance with large to-remove lists but fine with short ;; ones (loop for e in l unless (assoc (car e) to-remove) collect e)) (defun remove-duplicates-by-name (l to-remove) ;; high performance with large to-remove lists but consy and ;; probably slow with short ones (loop with dups = (loop with dt = (make-hash-table) for e in to-remove do (setf (gethash (car e) dt) t) finally (return dt)) for e in l unless (gethash (car e) dups) collect e))
你的例子与之无关 重复 ,但一切都要做 同 列表集 。
例如。:
(set-difference '((Oliver 1) (Charlie 2) (Oscar 20)) '((Oliver 2)(Charlie 3)) :key #'car) ==> ((Oscar 20)) (set-difference '((Oliver 1)) '((Oliver 2)(Charlie 3)) :key #'car) ==> () (set-difference '() '((Oliver 2)(Charlie 3)) :key #'car) ==> ()