在Lisp的列表中删除具有重复键的项目

时间:2014-08-03 20:24:57

标签: lisp elisp common-lisp associative-array duplicate-removal

假设我有一个大型的alist,其中有多个项目具有相同的键但具有相同或不同的值:

'((a . 1)
  (b . 2)
  (a . 3)
  (a . 4)
  (b . 5)
  (b . 6))

通常在使用alist时,可以使用assoc访问项目,该项目返回列表中的第一个匹配项目并忽略其余项目。因此,对待alist的惯用方法是,每次要使用旧键替换alist中的项时,只需添加一个新的点对并忽略旧的。因此,无论您有多少重复项,assoc都会忽略它们。您可以通过alist API工作并忽略实现细节,可以这么说。但是,如果我真的希望有一个alist所有重复的物理删除怎么办?只有最新的点对保留在列表中,所以上面的alist会变成'((a . 1) (b . 2))

Common Lisp或Emacs Lisp的任何解决方案都是可以接受的。

0 个答案:

没有答案