Преобразовать последовательность строк в целые числа (Clojure) - PullRequest
26 голосов
/ 17 января 2011

В настоящее время у меня проблема с чтением текстового файла из командной строки, содержащего хотя бы одно целое число.Я читаю файл, делаю совпадение с регулярным выражением, чтобы игнорировать пробелы.

(re-seq #"[0-9]+" (slurp (first *command-line-args*)))

После этого мне нужно написать целую функцию, просто чтобы преобразовать эту последовательность строк в последовательность целых чисел.Очевидно, я не могу сопоставить Integer. с последовательностью (если я не использую карту неправильно).

Есть ли какой-нибудь элегантный способ справиться с этим, что-то похожее на карту?Или мне нужно сначала пройти через рекурсивное отключение и привести его к Integer., чтобы заставить это работать?

В настоящее время я изучаю Clojure, и, изучая биты, я возвращаюсь и выполняю небольшие тесты для программистовЯ привык подбирать другие языки.

1 Ответ

46 голосов
/ 17 января 2011

Вы ищете Integer/parseInt.

user=> (map #(Integer/parseInt %) ["1" "2" "3" "4"])
(1 2 3 4)

Вы должны обернуть Integer/parseInt в анонимную функцию, потому что методы Java не являются функциями.

read-string будеттакже работают в этом случае:

user=> (map read-string ["1" "2" "3" "4"])
(1 2 3 4)

read-string читает любой объект из строки, а не только целые числа.Итак, если бы вы сделали (read-string "1.0"), вы бы вернули двойной.При чтении из внешних источников обычно лучше ограничить то, что можно прочитать, именно тем, что вам нужно, что в данном случае является целым числом.Поэтому я рекомендую использовать мой первый пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...