Convertir une séquence de chaînes en entiers (Clojure)
J'ai actuellement un problème où je dois lire un fichier texte à partir de la ligne de commande contenant au moins un entier. Je lis le fichier, en faisant une correspondance d'expression régulière pour ignorer les espaces.
(re-seq #"[0-9]+" (slurp (first *command-line-args*)))
Après cela, je dois écrire une fonction entière juste pour convertir cette séquence de chaînes en une séquence d'entiers. Apparemment, je ne peux pas mapper Integer.
à la séquence (sauf si j'utilise la carte de manière incorrecte).
Y a-t-il une façon élégante de gérer cela, quelque chose de similaire à carte? Ou dois-je passer par récursivement en premier et le lancer à Integer.
pour que cela fonctionne?
J'apprends actuellement Clojure, et comme j'apprends des bits, je reviens et je fais de petits quiz de programmeur que j'avais l'habitude de prendre d'autres langues.
1 réponses
Vous cherchez Integer/parseInt
.
user=> (map #(Integer/parseInt %) ["1" "2" "3" "4"])
(1 2 3 4)
Vous devez envelopper Integer/parseInt
dans une fonction anonyme car les méthodes Java ne sont pas des fonctions.
read-string
fonctionne également dans ce cas:
user=> (map read-string ["1" "2" "3" "4"])
(1 2 3 4)
read-string
lit n'importe quel objet à partir d'une chaîne, pas seulement des entiers. Donc, si tu le faisais (read-string "1.0")
Tu récupérerais un double. Lors de la lecture à partir de sources extérieures, il est généralement préférable de limiter ce qui peut être lu à ce dont vous avez besoin, qui est un entier dans ce cas. Par conséquent, je recommande d'utiliser mon premier exemple.