สมมติว่าฉันได้รับรายการรองแบบนี้:
(setq x '((foo . ((bar . "llama")
(baz . "monkey")))))
bar
และฉันต้องการให้ค่าที่ ฉันสามารถทำสิ่งนี้:
(assoc-default 'bar (assoc-default 'foo x))
แต่สิ่งที่ฉันชอบจริงๆคือสิ่งที่ยอมรับได้หลายปุ่มเช่น
(assoc-multi-key 'foo 'bar x)
สิ่งนั้นมีอยู่จริงหรือเปล่า ฉันแน่ใจว่าฉันสามารถเขียนได้ แต่ฉันรู้สึกว่า Google-fu ของฉันเพิ่งจะล้มเหลวและฉันไม่พบมัน
ฉันยังพบการจัดรูปแบบดั้งเดิมของ
—
paprika
setq
ฟอร์มในตัวอย่างที่สับสนดังนั้นฉันจึงแก้ไขเพื่อใช้เครื่องหมายจุดทั่วไปสำหรับรายการ assoc
อาโอเค. ดังนั้นอลิสต์จะมีสองระดับ คำถามยังไม่ชัดเจน -
—
Drew
assoc-multi-key
ยังไม่ระบุรายละเอียด
Drew: ประเด็น
—
abingham
assoc-multi-key
คือเพื่อค้นหาคีย์แรกในรายการ assoc นี่ควรแก้ไขเป็นรายการ assoc ใหม่ที่เราค้นหาคีย์ถัดไป และอื่น ๆ โดยทั่วไปแล้วมือสั้นสำหรับการขุดค่าออกมาจากรายการ assoc ที่ซ้อนกัน
@ Malabarba คุณอาจพูดถึง
—
YoungFrog
let-alist
ด้วย เช่นจะกลับมา(let-alist '((foo . ((bar . "llama") (baz . "monkey")))) .foo.bar)
"llama"
ฉันเดาว่าคุณเขียนlet-alist
หลังจากคำถามถูกถาม แต่มันอยู่ในจิตวิญญาณของคำถามและมูลค่าการกล่าวขวัญ IMO!
assoc-multi-key
เกี่ยวกับพฤติกรรมของ สันนิษฐานว่ามันจะค้นหาการจับคู่กับทั้งสองข้อโต้แย้งแรก แต่นั่นคือทั้งหมดที่เราสามารถคาดเดาได้จากสิ่งที่คุณพูด และมันไม่สามารถรับได้อย่างชัดเจนมากกว่าสองปุ่มเนื่องจากอาร์กิวเมนต์ alist (สมมุติx
) เป็นปุ่มสุดท้ายไม่ใช่คีย์แรก - ซึ่งแสดงว่ามันไม่มีประโยชน์โดยทั่วไป ลองระบุสิ่งที่คุณกำลังมองหาอย่างแท้จริง