removeif

function removeif( arr, fv, init ) --> removed

Description

Looks through an array table and removes each element that matches the truth function. The function returns all removed elements.

Parameters

arr

The array table where you want to remove elements.

fv

Check function that checks the values.

init

Specifies where to start the removing of elements, the default value is 1.

Return Values

removed

An array table with all removed elements.

Code

--ZFUNC-removeif-v1
local function removeif( arr, fv, init ) --> removed
   init = init or 1
   local removed = {}
   local i = 1
   while i <= #arr do
      if fv( arr[ i ] ) then
         local r = table.remove( arr, i )
         table.insert( removed, r )
      else
         i = i+1
      end
   end
   return removed
end

return removeif

Examples

local t = require( "taptest" )
local iseven = require( "iseven" )
local removeif = require( "removeif" )
local same = require( "same" )

arr = { 1, 2, 3, 4, 5, 6, 7 }
removed = removeif( arr, iseven )
t( same( arr, { 1, 3, 5, 7 } ), true )
t( same( removed, { 2, 4, 6 } ), true )

t()

Inspired by

See also