Recursion is beautiful (very) but often is slower...
(defun AM1 (d s / n c p e l)
(setq
c (substr d 1 1) n c
n (repeat (strlen d) (setq n (strcat c n)))
s (vl-string-translate d n s)
c (ascii c) p 0
e (vl-string-position c s)
)
(while e
(setq
l (cons (substr s (1+ p) (- e p)) l)
p (1+ e) e (vl-string-position c s p)
)
)
(reverse (cons (substr s (1+ p)) l))
)
(setq Keys ":;," String "A:B,C;D")
Benchmark.lsp | © 2005 Michael Puckett | All Rights Reserved
Elapsed milliseconds / relative speed for 131072 iteration(s):
(AM1 KEYS STRING)................1703 / 1.83 <fastest>
(AM1 KEYS STRING)................1704 / 1.82
(_StringSplit3 KEYS STRING)......1766 / 1.76
(_StringSplit3 KEYS STRING)......1781 / 1.75
(_StringSplit1 KEYS STRING)......1875 / 1.66
(_StringSplit1 KEYS STRING)......1906 / 1.63
(F KEYS STRING)..................2359 / 1.32
(F KEYS STRING)..................2360 / 1.32
(_StringSplit2 KEYS STRING)......3015 / 1.03
(F1 KEYS STRING).................3046 / 1.02
(_StringSplit2 KEYS STRING)......3094 / 1
(F1 KEYS STRING).................3109 / 1 <slowest>
(setq Keys ":;," String "A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:A:B,C;D:")
Elapsed milliseconds / relative speed for 16384 iteration(s):
(AM1 KEYS STRING)................1438 / 4.42 <fastest>
(AM1 KEYS STRING)................1453 / 4.38
(_StringSplit1 KEYS STRING)......2235 / 2.85
(_StringSplit1 KEYS STRING)......2235 / 2.85
(_StringSplit3 KEYS STRING)......3266 / 1.95
(_StringSplit3 KEYS STRING)......3312 / 1.92
(_StringSplit2 KEYS STRING)......5671 / 1.12
(_StringSplit2 KEYS STRING)......5750 / 1.11
(F KEYS STRING)..................5797 / 1.1
(F KEYS STRING)..................5813 / 1.09
(F1 KEYS STRING).................6297 / 1.01
(F1 KEYS STRING).................6359 / 1 <slowest>
(setq Keys ":;," String "A1234567890asdfghjklòasdfghjklò:Bybqwuybquyqwbiu89897879,Csdkjsdkjsdjk3443;Duyyuwe878723ijiu")
(repeat 4 (setq String (strcat String ";" String))
Elapsed milliseconds / relative speed for 16384 iteration(s):
(AM1 KEYS STRING).................1532 / 12.07 <fastest>
(AM1 KEYS STRING).................1609 / 11.49
(F KEYS STRING)...................3437 / 5.38
(F KEYS STRING)...................3453 / 5.35
(_StringSplit2 KEYS STRING).......4516 / 4.09
(_StringSplit2 KEYS STRING).......4609 / 4.01
(_StringSplit3 KEYS STRING)......15906 / 1.16
(_StringSplit3 KEYS STRING)......15906 / 1.16
(F1 KEYS STRING).................16375 / 1.13
(F1 KEYS STRING).................16454 / 1.12
(_StringSplit1 KEYS STRING)......17609 / 1.05
(_StringSplit1 KEYS STRING)......18485 / 1 <slowest>
Test order:
(Benchmark '(
(_StringSplit1 Keys String)
(_StringSplit2 Keys String)
(_StringSplit3 Keys String)
(AM1 Keys String)
(f Keys String)
(f1 Keys String)
(_StringSplit1 Keys String)
(_StringSplit2 Keys String)
(_StringSplit3 Keys String)
(AM1 Keys String)
(f Keys String)
(f1 Keys String)
) )