(print-table ks rows)
(print-table rows)
Prints a collection of maps in a textual table. Prints table headings
ks, and then a line of output for each row, corresponding to the keys
in ks. If ks are not specified, use the keys of the first item in rows.
Source
(defn
print-table
"Prints a collection of maps in a textual table. Prints table headings\n ks, and then a line of output for each row, corresponding to the keys\n in ks. If ks are not specified, use the keys of the first item in rows."
{:added "1.3"}
([ks rows]
(binding
[*print-newline*]
(when
(seq rows)
(let
[widths
(map
(fn
[k]
(apply
max
(count (str k))
(map
(fn* [p1__18646#] (count (str (get p1__18646# k))))
rows)))
ks)
spacers
(map
(fn* [p1__18647#] (apply str (repeat p1__18647# "-")))
widths)
fmt-row
(fn
[leader divider trailer row]
(str
leader
(apply
str
(interpose
divider
(for
[[col width]
(map
vector
(map (fn* [p1__18648#] (get row p1__18648#)) ks)
widths)]
(add-padding width (str col)))))
trailer))]
(cljs.core/println)
(cljs.core/println (fmt-row "| " " | " " |" (zipmap ks ks)))
(cljs.core/println (fmt-row "|-" "-+-" "-|" (zipmap ks spacers)))
(doseq
[row rows]
(cljs.core/println (fmt-row "| " " | " " |" row)))))))
([rows] (print-table (keys (first rows)) rows)))