@@ -209,6 +209,25 @@ for i, v in ipairs(c) do if c[1](exp) then return c[2](exp) end end end + +fn.select = function(tbl, prop, ...) + local keycache + local check if type(prop) == 'function' then + check = prop + keycache = ... + else + local val val, keycache = ... + check = function(ent) return ent[prop] == val end + end + for k,v in pairs(tbl) do + if (not keycache) or (not keycache[k]) then -- help avoid expensive selectors + if check(v,k) then + if keycache then keycache[k] = true end + return v, k + end + end + end +end return fn