在Lisp中映射两个字符串列表(以简短方式)?

drh*_*use 4 lisp hashtable list common-lisp

Lisp初学者在这里。

我有两种格式的字符串列表,它们的长度相同:

  keys = ("abc" "def" "gh" ...)
  values = ("qwe" "opr" "kmn" ...)
Run Code Online (Sandbox Code Playgroud)

我需要从这些列表构造哈希表或关联列表(无论是哪种构造方法都很容易并且从中快速获取值)。由于配对,它们处于适当的索引中。

我知道我可以通过迭代来映射它们。但是我想采用一种更具声明性的方式,如果可以的话,我正在寻找一种干净的方式。

cor*_*ump 6

有一个名为的专用函数PAIRLIS,它确实可以完成您要建立的关联列表的工作:

USER> (pairlis '("abc" "def" "gh")
               '("qwe" "opr" "kmn"))
(("gh" . "kmn") ("def" . "opr") ("abc" . "qwe"))
Run Code Online (Sandbox Code Playgroud)

请注意,顺序是相反的,但这取决于实现方式。由于您的键是唯一的,因此这里的顺序无关紧要。

然后,您可以使用流行的亚历山大图书馆从中构建一个哈希表:

USER> (alexandria:alist-hash-table * :test #'equalp)
#<HASH-TABLE :TEST EQUALP :COUNT 3 {101C66ECA3}>
Run Code Online (Sandbox Code Playgroud)

在这里,我使用带有测试的哈希表,equalp因为您的键是字符串。

注意 该*符号引用REPL中的最后一个主值