Erstellen Sie eine Assoziationsliste aus zwei Vektoren

7

Ich habe zwei Vektoren [apple orange]und [5 10]. Wie erstelle ich daraus eine Assoziationsliste ((apple 5) (orange 10))?

yi.tang.uni
quelle

Antworten:

11

Sie können verwenden cl-pairlis:

(require 'cl-lib)

(cl-pairlis '(apple orange) '(5 10))
;; =>
;; ((apple . 5) (orange . 10))

Funktioniert auch für Vektoren:

(cl-pairlis [apple orange] [5 10])
;; =>
;; ((apple . 5) (orange . 10))

(Die clBibliothek definiert den kürzeren Alias pairlisfür cl-pairlis, dies ist jedoch in neueren Emacs-Versionen veraltet.)

abo-abo
quelle
Hallo abo-abo, es funktioniert wie Magie! Ich möchte die Zuordnungsliste in einer Datei speichern. Kennen Sie eine gute Funktion dafür? (Einfügen funktioniert nicht) ...
yi.tang.uni
(Einfügen (prin1-to-string (pairlis [Apfelorange] [5 10]))
abo-abo
Interessanterweise wusste ich nicht, dass es mit Vektoren funktioniert (was ein undokumentiertes Merkmal zu sein scheint).
jch
@ abo-abo das ist toll, vielen Dank! hat mir viel Zeit beim googeln gespart!
yi.tang.uni
11

(cl-mapcar #'cons [apple orange] [5 10]) => ((apple . 5) (orange . 10))

(cl-mapcar #'list [apple orange] [5 10]) => ((apple 5) (orange 10))

Emacs cl-mapcarnimmt als Argumente eine Funktion der Arität eine oder mehrere und die gleiche Anzahl von Sequenzen wie seine Arität. Common Lisp's mapcarist ähnlich, aber die einzigen Sequenzen, die es akzeptiert, sind Listen.

Drew
quelle