Merge pull request #3294 from sclu1034/feature/count_keys
Add utility to count table keys
This commit is contained in:
commit
7a8fa9d27a
|
@ -165,6 +165,23 @@ function gtable.keys(t)
|
||||||
return keys
|
return keys
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- Get the number of keys in a table, both integer and string indicies.
|
||||||
|
--
|
||||||
|
-- This is functionally equivalent, but faster than `#gears.table.keys(t)`.
|
||||||
|
--
|
||||||
|
-- @DOC_text_gears_table_count_keys_EXAMPLE@
|
||||||
|
--
|
||||||
|
-- @tparam table t The table for which to count the keys.
|
||||||
|
-- @treturn number The number of keys in the table.
|
||||||
|
-- @staticfct gears.table.count_keys
|
||||||
|
function gtable.count_keys(t)
|
||||||
|
local count = 0
|
||||||
|
for _ in pairs(t) do
|
||||||
|
count = count + 1
|
||||||
|
end
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
|
||||||
--- Filter a table's keys for certain content type.
|
--- Filter a table's keys for certain content type.
|
||||||
--
|
--
|
||||||
-- @tparam table t The table to retrieve the keys for.
|
-- @tparam table t The table to retrieve the keys for.
|
||||||
|
|
|
@ -7,6 +7,34 @@ describe("gears.table", function()
|
||||||
assert.is.same(gtable.keys(t), { 1, 2, "a" })
|
assert.is.same(gtable.keys(t), { 1, 2, "a" })
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe("gears.table.count_keys", function()
|
||||||
|
it("counts keys in an empty table", function()
|
||||||
|
local t = {}
|
||||||
|
assert.is.same(gtable.count_keys(t), 0)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("counts keys in a sparse array", function()
|
||||||
|
local t = { 1, nil, 3 }
|
||||||
|
assert.is.same(gtable.count_keys(t), 2)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("counts keys in a regular array", function()
|
||||||
|
local t = { 1, 2, 3 }
|
||||||
|
assert.is.same(gtable.count_keys(t), 3)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("counts keys in a hash table", function()
|
||||||
|
local t = { a = 1, b = "2", c = true }
|
||||||
|
assert.is.same(gtable.count_keys(t), 3)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("counts keys in a mixed table", function()
|
||||||
|
local t = { 1, a = 2, nil, 4 }
|
||||||
|
assert.is.same(gtable.count_keys(t), 3)
|
||||||
|
end)
|
||||||
|
|
||||||
|
end)
|
||||||
|
|
||||||
it("table.keys_filter", function()
|
it("table.keys_filter", function()
|
||||||
local t = { "a", 1, function() end, false}
|
local t = { "a", 1, function() end, false}
|
||||||
assert.is.same(gtable.keys_filter(t, "number", "function"), { 2, 3 })
|
assert.is.same(gtable.keys_filter(t, "number", "function"), { 2, 3 })
|
||||||
|
@ -104,3 +132,5 @@ describe("gears.table", function()
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
--DOC_GEN_OUTPUT --DOC_HIDE
|
||||||
|
local gears = require("gears") --DOC_HIDE
|
||||||
|
|
||||||
|
local tab = { 1, nil, "a", "b", foo = "bar" }
|
||||||
|
local count = gears.table.count_keys(tab)
|
||||||
|
print("The table has " .. count .. " keys")
|
Loading…
Reference in New Issue