Emacs 如何按键名检索cons单元格的值?

Emacs 如何按键名检索cons单元格的值?,emacs,elisp,Emacs,Elisp,假设我有一个cons单元格列表,如下所示: (setq foo '(("a" . 1) ("b" . 2) ("c" . 3))) 我想通过“key name”检索特定cons单元格的值。有没有一个函数可以让我这样做 例如 或者类似的东西。提前谢谢 这样的列表称为关联列表,简称alist。在形式上,关联列表是一个键及其关联值的conse列表 assoc功能就是您需要的。它将一个键和一个列表作为其参数,并返回列表中键的第一个关联,如下所示: ELISP>(setqfoo'(“a.1”(“b.2”

假设我有一个cons单元格列表,如下所示:

(setq foo '(("a" . 1) ("b" . 2) ("c" . 3)))
我想通过“key name”检索特定cons单元格的值。有没有一个函数可以让我这样做

例如

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

这样的列表称为关联列表,简称alist。在形式上,关联列表是一个键及其关联值的conse列表

assoc
功能就是您需要的。它将一个键和一个列表作为其参数,并返回列表中键的第一个关联,如下所示:

ELISP>(setqfoo'(“a.1”(“b.2”(“c.3)))
(“a.1)
(“b.2)
(“c.3))
ELISP>(assoc“a”foo)
(“a.1)
ELISP>(cdr(助理“a”foo))
1.
assoc string
函数类似于
assoc
函数,但特定于键为字符串的关联列表。除了key和alist之外,它还可以接受另一个使key比较不区分大小写的可选参数:

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

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

ELISP> (assoc-string "A" foo t)
("a" . 1)
有关关联列表相关函数的完整列表,请参阅。

允许您通过“键名”检索特定cons单元格的值

使用键和列表作为参数,可以为您提供与键关联的值。 例如:

(a.1)(b.2)(c.3)))
计算结果为1

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

(列表获取键列表&可选默认删除测试fn)
因此,我们可以给出:

  • 如果键不匹配,则返回的默认值
  • 如果在中新值为默认值,则删除键值对的标志REMOVE
  • (setf(alist-get-KEY-alist-DEFAULT t)默认值)
    
  • 测试功能
    TESTFN
    用于将钥匙与车辆进行比较
  • ELISP> (assoc-string "a" foo)
    ("a" . 1)
    
    ELISP> (assoc-string "A" foo)
    nil
    
    ELISP> (assoc-string "A" foo t)
    ("a" . 1)
    
    ELISP> (setq foo '(("a" . 1) ("b" . 2) ("c" . 3)))
    (("a" . 1)
     ("b" . 2)
     ("c" . 3))
    
    ELISP> (assoc-default "a" foo)
    1