Size: a a a

Clojure — русскоговорящее сообщество

2020 March 03

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Sergey Trofimov
проще не вижу
только если вариации на тему
(let [id "ID", amount 5]
 (map-indexed #(str %2 (inc %1)) (repeat amount (str id "_"))))

(let [id "ID", amount 5]
 (map str (repeat amount (str id "_")) (range 1 Long/MAX_VALUE)))

(let [id "ID", amount 5]
 (map str (repeat amount id) (repeat "_") (range 1 Long/MAX_VALUE)))
      (map-indexed #(str %2 "_" (inc %1)) (repeat amount id))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
      (map-indexed #(str %2 "_" (inc %1)) (repeat amount id))
я этот вариант не стал предлагать, так как в каждой итерации делается inc 😞
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
ну, просто map-indexed имхо наиболее натуральный вариант для подобных вещей
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
кстати
(for [suf (range amount)]
 (str id "_" (inc suf)))


или

(for [suf (range 1 (inc amount))]
 (str id "_" suf))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
я этот вариант не стал предлагать, так как в каждой итерации делается inc 😞
вру, у меня же есть похожий вариант
мой вариант съэкономил на конкатенации id и "_"
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
Sergey Trofimov
вру, у меня же есть похожий вариант
мой вариант съэкономил на конкатенации id и "_"
Вот и оптимизации подоспели😉
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
тут, на самом деле, так и просится range, который поддерживает кастомную функцию
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
тут, на самом деле, так и просится range, который поддерживает кастомную функцию
iterate?
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
с iterate есть одна проблема, он рекурсивный, а надо по индексу
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
ну т.е. можно наколдовать, конечно, прокидывание индекса хэшмапкой, но то такое
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
с iterate есть одна проблема, он рекурсивный, а надо по индексу
ну, (range) тоже рекурсивный
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну, (range) тоже рекурсивный
не в том смысле, в смысле iterate возвращает результат из прошлого результата
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
я, честно говоря, не знаю, нужно ли тут «по индексу»
я вижу, что человек хочет общий префикс и последовательность суффиксов
так вот алгоритм для суффиксов может быть произвольный
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
не в том смысле, в смысле iterate возвращает результат из прошлого результата
индекс тоже инкремент предыдущего 😊
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Sergey Trofimov
индекс тоже инкремент предыдущего 😊
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
ну да :)
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
вообще, я тут, грешным делом, подумал, что не факт, что (str id "_" index) никто не мешает потом генерить на фронте, а в кишках держать мапку
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
я, честно говоря, не знаю, нужно ли тут «по индексу»
я вижу, что человек хочет общий префикс и последовательность суффиксов
так вот алгоритм для суффиксов может быть произвольный
поэтому вариант (map str (repeat amount id) (repeat "_") (range 1 Long/MAX_VALUE)) видится наиболее логичным, как конкатенация а) конечной последовательности префиксов, б) последовательности разделителей и в) последовательности суффиксов
источник

DL

Dmytro Lispyvnyi '(🌲 🍺) in Clojure — русскоговорящее сообщество
Sergey Trofimov
поэтому вариант (map str (repeat amount id) (repeat "_") (range 1 Long/MAX_VALUE)) видится наиболее логичным, как конкатенация а) конечной последовательности префиксов, б) последовательности разделителей и в) последовательности суффиксов
мне, всё-таки наиболее логичным в плане разделения логики видится разбитие на функции gen-string-ids (для map-инга) и gen-ids (для "рейнжинга")
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Dmytro Lispyvnyi '(🌲 🍺)
мне, всё-таки наиболее логичным в плане разделения логики видится разбитие на функции gen-string-ids (для map-инга) и gen-ids (для "рейнжинга")
ну, заикаться про разбиение на функции я стреманулся 😆
источник