Clojure.
(defn concat-inner-seqs
"concat inner sequencies in sequence of tuples"
[seq-of-seqs]
(apply (partial map concat) seq-of-seqs))
(println
(concat-inner-seqs [[[1] [2] [:a]]
[[3] [4] [:b]]
[[5] [6] [:c]]]))
; ((1 3 5) (2 4 6) (:a :b :c))
А теперь вот это придется объяснить всем заинтересованным сотрудникам.PS: Версия с мапами вместо туплов:
(defn concat-maps-seq
"concat inner sequencies in sequence of maps"
[seq-of-maps]
(apply (partial merge-with concat) seq-of-maps))
(def test-data-maps
[
{:F1 [1 "b" "3"] :F2 [2 'aa] :F3 [:a :e] :F4 [3333]}
{:F1 [3] :F4 [4] :F6 [:b] :Pauk "abc"}
{:F1 [5] :F3 [6] :F2 [:c] :Pauk "def"}
])
(println test-data-maps)
(println (concat-maps-seq test-data-maps))
Сделана заменой map на merge-with. Можно использовать именованные поля и разное их количество.
no subject
Поэтому я использую (apply fn seq) а fn создаю с помощью частичного применения map concat
no subject
no subject
Вот если я найду целый класс функций типа map и merge-with и пойму, что в них общего и чем они мне будут полезны в опердени - тогда обобщу. Но частные реализации все равно оставлю - они нужны чаще всего.
no subject
no subject
Получается трэшатина типа коммон-лисповых caaaddddr
no subject
(defn transpose [m] (apply (partial map list) m))
no subject
интересненько. Значит общность с транспонированием действительно имеется.
no subject