文字列リストの重複をなくす

たとえば、パス文字列を保存したリストの重複をなくしたい時はどうするか。

(let ((l '("d:/work" "C:/foo/bar" "D:/work" "d:/work/lisp" "D:/work/lisp")))
  (remove-duplicates l :test #'string-equal :from-end t))

("d:/work" "C:/foo/bar" "d:/work/lisp")

これ一発で終わり。
上の例は

  • 左優先にしたかったので、:from-end に t を指定
  • 大文字小文字の区別なしで一致を取りたかったので string= じゃなくて string-equal を指定

しといた。

windows でのパス文字列は、大文字/小文字の区別をせずに重複を取り除く必要があるから重宝する。
やれ、一旦すべて大文字にして比較しようかとか、ループで回すかとか、そんなの考えなくていい。