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

标签 list lisp common-lisp hashtable

Lisp 初学者在这里。

我有两个长度相同的这种形式的字符串列表:

  keys = ("abc" "def" "gh" ...)
  values = ("qwe" "opr" "kmn" ...)

我需要从这些列表中构建散列表或关联列表(无论哪个易于构建且可以快速获取值)。由于它们的配对,它们处于正确的索引中。

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

最佳答案

有一个名为 PAIRLIS 的专用函数这正是您想要构建关联列表的功能:

USER> (pairlis '("abc" "def" "gh")
               '("qwe" "opr" "kmn"))
(("gh" . "kmn") ("def" . "opr") ("abc" . "qwe"))

请注意,顺序是相反的,但这取决于实现。在这里订单无关紧要,因为您的 key 是唯一的。

然后,您可以使用流行的alexandria库来构建一个哈希表:
USER> (alexandria:alist-hash-table * :test #'equalp)
#<HASH-TABLE :TEST EQUALP :COUNT 3 {101C66ECA3}>

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

注意。 * 符号指的是 REPL 中的最后一个主值

关于list - 在 Lisp 中映射两个字符串列表(以简短的方式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58978598/

相关文章:

C# 使用 LINQ 对字符数组列表进行排序

function - 你能用十个原语实现任何纯 LISP 函数吗? (即没有类型谓词)

debugging - Common Lisp 或 Chicken Scheme 有 lint 吗?

lisp - "Define"在我的 lisp 编译器(Steel Bank Common Lisp)中未定义

python - Python 中的自动增长列表?

regex - 在R中正确使用gsub/正则表达式?

lisp - 如何在 Emacs Lisp 中动态更改 lambda 内容?

emacs - 关于 define-key 的一些混淆(以及何时引用参数的问题)

clojure - 带有针对浏览器的阅读器宏的 Lisp?

Java:比较两个列表