J'ai un tableau de tuples, où chaque tuple est un 2 tuple avec une clé et une valeur. Quel serait le moyen le plus propre de convertir ce tableau de tuples en une table de hachage?Convertir un tableau de tuples en une table de hachage dans Clojure
Répondre
user=> (into {} [[:a 1] [:b 2]])
{:a 1, :b 2}
En supposant que "tupel" signifie "matrice à deux elememt":
(reduce
(fn [m tupel]
(assoc m
(aget tupel 0)
(aget tupel 1)))
{}
array-of-tupels)
Nice. Si votre (à l'OP) "array" est en fait un seq, au lieu de '(aget t n)' vous pouvez utiliser '(t n)', ce qui est un peu plus joli. – Isaac
'(t n)' ne fonctionne pas avec les séquences. Il le fait avec des vecteurs. Mais alors vous pouvez simplement utiliser '(dans {} array-of-vectors)' au lieu de 'reduce'. – kotarak
user=> (def a [[:a 4] [:b 6]])
user=> (apply hash-map (flatten a))
{:a 4, :b 6}
'flatten' est trop compliqué pour ce problème. Vous pouvez profiter des tuples sous la forme d'un MapEntry (vecteur de clé et de valeur). – miner49r
N'utilisez jamais 'flatten' pour une situation comme celle-ci: elle aplatira heureusement toutes vos clés et valeurs si elles sont des structures de données! –
Une carte est une séquence d'éléments MapEntry. Chaque MapEntry est un vecteur d'une clé et d'une valeur. Les tuples dans la question sont déjà sous la forme d'un MapEntry, ce qui rend les choses pratiques. (C'est aussi pourquoi la solution into
est bonne.)
user=> (reduce conj {} [[:a 1] [:b 2]])
{:b 2, :a 1}
Merci pour la bonne explication! Donc seul le vecteur de 2 éléments est MapEntry, ainsi (dans {} [[: a 1] {: b 2}]) fonctionnera, mais (dans {} ['(:: 1) {: b 2}]) ne fonctionne pas.Il obtient l'erreur de "java.lang.ClassCastException: clojure.lang.Keyword ne peut pas être converti en java.util.Map $ Entry". Je me demande pourquoi Clojure ne peut pas traiter tous les 2 éléments de la même manière dans ce contexte. Cela le rendra plus cohérent. Quelle est la raison pour laquelle ça ne fonctionne pas? –
- 1. Format un tableau de tuples dans un joli « table »
- 2. Comment ajoutez-vous cette table de hachage dans Clojure?
- 3. Utiliser une table de hachage pour créer un tableau illimité
- 4. Comment convertir un tableau en table MySQL?
- 5. Tuples inexistants dans une table auto-jointive
- 6. Comment puis-je initialiser un tableau dans une table de hachage en Ruby
- 7. listes imbriquées Convertir en une liste de tuples
- 8. Clojure: Comment appliquer une fonction à un sous-ensemble des entrées d'une table de hachage?
- 9. Conversion d'un tableau de clés et un tableau de valeurs dans un hachage en Ruby
- 10. Comment convertir une table de hachage Java en un NSDictionary (obj-C)?
- 11. Comment convertir une séquence en octet [] dans Clojure?
- 12. Tableau de hachage tableau 5D
- 13. Comment convertir hachage dans le tableau à un tableau en Ruby
- 14. Comment convertir un mot-clé clojure en une chaîne?
- 15. Comment convertir Tapez Tuples
- 16. table de hachage dans Rails
- 17. Modification hachage dans un hachage en Perl
- 18. Comment convertir un hachage Ruby en XML?
- 19. Comment puis-je convertir un LazySeq de caractères en une chaîne dans Clojure?
- 20. Carte de tuples dans un dictionnaire, python
- 21. Construction d'une table de hachage/fonction de hachage
- 22. Comment initialiser un tableau d'octets dans Clojure
- 23. comment convertir un hachage dans un tableau avec un ordre particulier? (ruby)
- 24. Meilleur moyen de convertir une liste à un ensemble de deux-tuples dans Erlang?
- 25. Programme de création d'une table de hachage
- 26. Convertir un mot en tableau de caractères
- 27. impossible de convertir un tableau en entier
- 28. Supprimer tableau dans le hachage
- 29. Une table, besoin de plusieurs valeurs de différentes lignes/tuples
- 30. Ajouter à une table de hachage
Notez que cela fonctionne également pour les tableaux de tableaux à deux éléments - il suffit d'ajouter un '(map vec ...)' autour de l'argument du tableau: '(dans {} (map vec an-array-of -two-element-arrays)). –
Et encore une fois, un de ces moments "duh" que vous avez si souvent en utilisant Clojure. Bonne réponse. – Isaac
Mais un relativement cher. – kotarak