From b42c52ae2de08c1104c2677a36536c37e83e7ad6 Mon Sep 17 00:00:00 2001 From: unwox Date: Thu, 31 Oct 2024 16:43:24 +0600 Subject: make array.concat much faster --- lib/array.fnl | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) (limited to 'lib') diff --git a/lib/array.fnl b/lib/array.fnl index 8af6244..eb4827a 100644 --- a/lib/array.fnl +++ b/lib/array.fnl @@ -4,15 +4,14 @@ (table.sort a less-fn) a) -(fn concat [a b] - (local copy - (fn [a b] - (reduce - (fn [_ v res] - (table.insert res v) - res) - b a))) - (copy a b)) +(fn concat [...] + (local res []) + (var cur 1) + (each [_ t (pairs [...])] + (each [_ v (pairs t)] + (tset res cur v) + (set cur (+ 1 cur)))) + res) (fn flip [a] (collect [k v (pairs a)] @@ -54,14 +53,14 @@ false) (fn list [obj] - (local result []) + (local res []) (var cursor 1) (each [_ v (pairs obj)] - (tset result cursor v) + (tset res cursor v) (set cursor (+ 1 cursor))) ;; sort so we always return the same list for the same object - (table.sort result) - result) + (table.sort res) + res) (local join table.concat) -- cgit v1.2.3