• Subject: Re: Table (sequence) concatenation
• From: "Soni L." <fakedme@...>
• Date: Fri, 23 Jan 2015 16:48:17 -0200

```
On 23/01/15 04:35 PM, Hisham wrote:
```
```On 23 January 2015 at 13:44, Soni L. <fakedme@gmail.com> wrote:
```
```How can I quickly concatenate 2 tables? (or convert a whole string to a
table of bytes/numbers)

For example:

local t = {string.byte(str, 1, stack_limit)} .. {string.byte(str,
stack_limit+1, stack_limit*2)} -- .. etc

Or:

local t = string.bytearray(str)

Both of them would be much faster (and human-friendly) than this:

local t1 = {string.byte(str, 1, stack_limit)}
local t2 = {string.byte(str, stack_limit+1, stack_limit*2)}
local t = t1
for k,v in ipairs(t2) do
t[k+stack_limit] = v
end
-- etc
```
```--os.execute("dd if=/dev/urandom of=file bs=1M count=1")
local fd = io.open("file")
fd:close()

-- time: about 0.17 on Lua 5.2
-- time: about 0.19 on Lua 5.3
-- time: about 0.02 on LuaJIT
local function strarray(longstr)
local t = {}
for i = 1, #longstr do
t[i] = longstr:byte(i)
end
return t
end

-- time: about 0.11 on Lua 5.3
-- time: about 0.11 on Lua 5.2 + compat53
-- time: about 0.08 on LuaJIT + compat53
local function strarray2(longstr)
-- tuning the step does not affect speed much
-- (for this example size, at least.)
local step = 500
local t = {}
for i = 1, #longstr, step do
local u = { longstr:byte(i, i+step) }
table.move(u, 1, #u, i, t)
end
return t
end

-- time: about 0.11 on Lua 5.2
-- time: about 0.14 on Lua 5.3
-- time: about 0.03 on LuaJIT
local function strarray3(longstr)
local step = 500
local t = {}
for i = 1, #longstr, step do
local u = { longstr:byte(i, i+step) }
for m = 1, #u do
t[i+m-1] = u[m]
end
end
return t
end

local function dump(t)
for i = 1, #t, 16 do
for x = 0, 15 do
io.write( ("%02x "):format(t[i+x]) )
end
io.write("\n")
end
end

local function check(t1, t2)
if #t1 ~= #t2 then return false end
for i = 1, #t1 do
if t1[i] ~= t2[i] then return false end
end
return true
end

local t = strarray(longstr)
--local t2 = strarray2(longstr)
--local t3 = strarray3(longstr)
--print(check(t, t3))
--dump(t)

```
```Damn LuaJIT beats everything >.>