2012-10-05 60 views
1

說我有利弊小區的名單,像這樣:如何通過鍵名檢索cons單元格的值?

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

而且我想用「鍵值名」,以獲取特定的利弊單元格的值。有沒有一個函數可以讓我這麼做?

E.g.

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

或類似的東西。提前致謝!

回答

9

這樣的列表被稱爲關聯列表alist縮寫。形式上,關聯列表是關鍵字及其關聯值的列表。

assoc功能就是你要找的。它需要一個密鑰和ALIST作爲參數,並返回在ALIST的條款equal關鍵的第一聯想:

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

相關問題