slice

function slice( tab [, first [, last]] ) --> sub

Description

Returns a sub-array(slice) of an array table. slice does not affect the table itself. It is possible to use negative numbers to identifie the first and last element of the sub-array. This functions works like the lua standard function string.sub.

Parameters

tab

The array table from where we want a slice. The content of tab itself will not be changed.

first

Index where the sub-array starts in the table. As a negative index, begin indicates an offset from the end of the sequence. The value -2 means that the subarray starts with the penultimate element of the table. If first is omitted starts the sub-array from index 1.

last

Index where the sub-array ends in the table. As a negative index, begin indicates an offset from the end of the sequence. The value -2 means that the subarray ends with the penultimate element of the table. If last is omitted ends the sub-array at index #tab.

Return Values

sub

The sub-array of the assigned array table

Code

--ZFUNC-slice-v1
local function slice( tab, first, last ) --> sub
   local sub = {}
   local n = #tab

   first = first or 1
   last = last or n
   if last < 0 then
      last = n + last + 1
   elseif last > n then
      last = n
   end

   if first < 1 or first > n then
      return {}
   end

   for i = first, last do
      table.insert( sub, tab[ i ] )
   end

   return sub
end

return slice

Examples

local t = require( "tapered" )
local slice = require( "slice" )

local tab = { "a", "b", "c", "d", "e" }
t.is( "bcde", table.concat( slice( tab, 2 ) ) )
t.is( "bcd", table.concat( slice( tab, 2, -2 ) ) )
t.is( "bc", table.concat( slice( tab, 2, 3 ) ) )

t.done()

Inspired by

See also