Я хочу заполнить 2d-массив в clojure, как мы это делаем в java
Я привел пример java. Я хочу сделать это в Clojure
Scanner sc=new Scanner(System.in);
Scanner sc1=new Scanner(System.in);
int row=sc.nextInt();
int col=sc.nextInt();
realMatrix=new String[row][col];
String[] in=new String[row];
for(int k=0;k<row;k++) {
in[k]=sc1.nextLine();
}
for(int i=0;i<row;i++) {
char[] charArry=in[i].toCharArray();
for(int j=0;j<col;j++) {
realMatrix[i][j]=Character.toString(charArry[j]);
}
}
Пожалуйста, добавьте код, который вы пробовали, и проблемы, с которыми вы столкнулись. А поскольку Clojure работает на JVM, вы можете с таким же успехом повторно использовать свой существующий Java-код.
Если ваш ввод (lines
) действителен (он содержит правильное количество строк, и каждая строка содержит правильное количество символов), его можно проанализировать с помощью
(vec (map #(clojure.string/split % #"") (drop 2 lines)))
Если ваш ввод выглядит как lines
ниже, вам нужно отфильтровать !
s:
(def lines
["3"
"5"
"abcde!!!"
"FGHIJ!!!"
"klmno!!!"
"!!!!!!!!"
"!!!!!!!!"])
(defn split-row [row n-cols]
(vec (take n-cols (clojure.string/split row #""))))
(defn parse-matrix [lines]
(let [n-rows (Integer. (first lines))
n-cols (Integer. (second lines))
matrix-lines (take n-rows (drop 2 lines))]
(vec (map #(split-row % n-cols) matrix-lines))))
Если вы действительно хотите проанализировать его, поскольку он читается со стандартного ввода:
(defn parse-matrix-stdin []
(let [n-rows (Integer. (read-line))
n-cols (Integer. (read-line))
matrix-lines (take n-rows (repeatedly read-line))]
(vec (map #(split-row % n-cols) matrix-lines))))
Возможный дубликат Обработка файла посимвольно в Clojure