mirror of
https://github.com/1bardesign/batteries.git
synced 2024-11-22 06:04:35 +00:00
Add comments for things that surprised me
As a new user, there were things I was skeptical about and after digging in, these were my conclusions. Compared to the simple and obvious lua wiki solutions, batteries' string functions are slightly faster. GC is the same. Test local str = "hello world" local fn = function() local x = 0 if stringx.ends_with(str, "h") then x = x + 1 end if stringx.ends_with(str, "helll") then x = x + 1 end if stringx.ends_with(str, "helicopter") then x = x + 1 end end local pretty = require "inspect" print("stringx =", pretty({ time_taken = {measure.time_taken(fn, 10000)}, memory_taken = {measure.memory_taken(fn, 10000)} })) local function starts_with(str, prefix) return str:find(prefix, 1, true) == 1 end local function ends_with(str, ending) return ending == "" or str:sub(-#ending) == ending end local fn = function() local x = 0 if ends_with(str, "h") then x = x + 1 end if ends_with(str, "helll") then x = x + 1 end if ends_with(str, "helicopter") then x = x + 1 end end print("find =", pretty({ time_taken = {measure.time_taken(fn, 10000)}, memory_taken = {measure.memory_taken(fn, 10000)} })) starts_with =========== stringx = { memory_taken = { 0, 0, 0 }, time_taken = { 1.5098012518138e-007, 9.988434612751e-008, 2.1699932403862e-005 } } find = { memory_taken = { 0, 0, 0 }, time_taken = { 2.7349997544661e-007, 1.9988510757685e-007, 9.1999536380172e-006 } } ends_with ========= stringx = { memory_taken = { 0, 0, 0 }, time_taken = { 9.0479978825897e-008, 0, 2.5199959054589e-005 } } find = { memory_taken = { 0, 0, 0 }, time_taken = { 2.1833006758243e-007, 1.9988510757685e-007, 6.1000464484096e-006 } }
This commit is contained in:
parent
f6a18380d4
commit
66a6c5a50e
3
set.lua
3
set.lua
@ -1,5 +1,8 @@
|
||||
--[[
|
||||
set type with appropriate operations
|
||||
|
||||
NOTE: This is actually a unique list (ordered set). So it's more than just
|
||||
a table with keys for values.
|
||||
]]
|
||||
|
||||
local path = (...):gsub("set", "")
|
||||
|
@ -249,6 +249,7 @@ end
|
||||
|
||||
--check if a given string starts with another
|
||||
--(without garbage)
|
||||
--Using loops is actually faster than string.find!
|
||||
function stringx.starts_with(s, prefix)
|
||||
for i = 1, #prefix do
|
||||
if s:byte(i) ~= prefix:byte(i) then
|
||||
|
Loading…
Reference in New Issue
Block a user