たとえば、パス文字列を保存したリストの重複をなくしたい時はどうするか。
(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 でのパス文字列は、大文字/小文字の区別をせずに重複を取り除く必要があるから重宝する。
やれ、一旦すべて大文字にして比較しようかとか、ループで回すかとか、そんなの考えなくていい。
0 コメント :
コメントを投稿