如何通过密钥名称检索缺点单元格的值?

时间:2012-10-05 22:08:23

标签: emacs elisp

说我有一个这样的缺点列表:

(setq foo '(("a" . 1) ("b" . 2) ("c" . 3)))

我想通过“密钥名称”检索特定缺点单元格的值。有没有让我这样做的功能?

E.g。

(get-by-key "a" foo) ;; => 1

或类似的东西。提前谢谢!

3 个答案:

答案 0 :(得分:10)

此类列表简称为关联列表 alist 。形式上,关联列表是键的一致性列表及其相关值。

您正在寻找assoc功能。它需要一个键和一个alist作为其参数,并以equal的形式返回alist中键的第一个关联:

ELISP> (setq foo '(("a" . 1) ("b" . 2) ("c" . 3)))
(("a" . 1)
 ("b" . 2)
 ("c" . 3))

ELISP> (assoc "a" foo)
("a" . 1)

ELISP> (cdr (assoc "a" foo))
1

assoc-string函数类似于assoc函数,但特定于其键为字符串的关联列表。除了键和alist之外,还可以使用另一个可选参数来使关键比较不区分大小写:

ELISP> (assoc-string "a" foo)
("a" . 1)

ELISP> (assoc-string "A" foo)
nil

ELISP> (assoc-string "A" foo t)
("a" . 1)

有关关联列表相关功能的完整列表,请参阅GNU Emacs Lisp Reference Manual

答案 1 :(得分:0)

assoc-default使您可以通过“键名”检索特定cons单元格的值。

ELISP> (setq foo '(("a" . 1) ("b" . 2) ("c" . 3)))
(("a" . 1)
 ("b" . 2)
 ("c" . 3))

ELISP> (assoc-default "a" foo)
1

答案 2 :(得分:0)

alist-get 以 KEY 和 ALIST 作为参数为您提供与 KEY 关联的 VALUE。 例如,

(alist-get 'a '((a . 1) (b . 2) (c . 3)))

评估为 1。

默认情况下与 eq 进行比较。但它的完整参数列表是:

(alist-get KEY ALIST &optional DEFAULT REMOVE TESTFN)

所以可以给予:

  1. 如果 KEY 不匹配则返回一个 DEFAULT 值,
  2. 如果新值是 DEFAULT,则移除 KEY VALUE 对的标志 REMOVE
(setf (alist-get KEY ALIST DEFAULT t) DEFAULT)
  1. 用于比较 KEY 和 ALIST 汽车的测试函数 TESTFN