add gs
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
--[[
|
||||
Provides functions for manipulating immutable data structures.
|
||||
]]
|
||||
|
||||
local Immutable = {}
|
||||
|
||||
--[[
|
||||
Merges dictionary-like tables together.
|
||||
]]
|
||||
function Immutable.JoinDictionaries(...)
|
||||
local result = {}
|
||||
|
||||
for i = 1, select("#", ...) do
|
||||
local dictionary = select(i, ...)
|
||||
for key, value in pairs(dictionary) do
|
||||
result[key] = value
|
||||
end
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
--[[
|
||||
Joins any number of lists together into a new list
|
||||
]]
|
||||
function Immutable.JoinLists(...)
|
||||
local new = {}
|
||||
|
||||
for listKey = 1, select("#", ...) do
|
||||
local list = select(listKey, ...)
|
||||
local len = #new
|
||||
|
||||
for itemKey = 1, #list do
|
||||
new[len + itemKey] = list[itemKey]
|
||||
end
|
||||
end
|
||||
|
||||
return new
|
||||
end
|
||||
|
||||
--[[
|
||||
Creates a new copy of the dictionary and sets a value inside it.
|
||||
]]
|
||||
function Immutable.Set(dictionary, key, value)
|
||||
local new = {}
|
||||
|
||||
for key, value in pairs(dictionary) do
|
||||
new[key] = value
|
||||
end
|
||||
|
||||
new[key] = value
|
||||
|
||||
return new
|
||||
end
|
||||
|
||||
--[[
|
||||
Creates a new copy of the list with the given elements appended to it.
|
||||
]]
|
||||
function Immutable.Append(list, ...)
|
||||
local new = {}
|
||||
local len = #list
|
||||
|
||||
for key = 1, len do
|
||||
new[key] = list[key]
|
||||
end
|
||||
|
||||
for i = 1, select("#", ...) do
|
||||
new[len + i] = select(i, ...)
|
||||
end
|
||||
|
||||
return new
|
||||
end
|
||||
|
||||
--[[
|
||||
Remove elements from a dictionary
|
||||
]]
|
||||
function Immutable.RemoveFromDictionary(dictionary, ...)
|
||||
local result = {}
|
||||
|
||||
for key, value in pairs(dictionary) do
|
||||
local found = false
|
||||
for listKey = 1, select("#", ...) do
|
||||
if key == select(listKey, ...) then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
end
|
||||
if not found then
|
||||
result[key] = value
|
||||
end
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
--[[
|
||||
Remove the given key from the list.
|
||||
]]
|
||||
function Immutable.RemoveFromList(list, removeIndex)
|
||||
local new = {}
|
||||
|
||||
for i = 1, #list do
|
||||
if i ~= removeIndex then
|
||||
table.insert(new, list[i])
|
||||
end
|
||||
end
|
||||
|
||||
return new
|
||||
end
|
||||
|
||||
--[[
|
||||
Remove the range from the list starting from the index.
|
||||
]]
|
||||
function Immutable.RemoveRangeFromList(list, index, count)
|
||||
local new = {}
|
||||
|
||||
for i = 1, #list do
|
||||
if i < index or i >= index + count then
|
||||
table.insert(new, list[i])
|
||||
end
|
||||
end
|
||||
|
||||
return new
|
||||
end
|
||||
|
||||
--[[
|
||||
Creates a new list that has no occurrences of the given value.
|
||||
]]
|
||||
function Immutable.RemoveValueFromList(list, removeValue)
|
||||
local new = {}
|
||||
|
||||
for i = 1, #list do
|
||||
if list[i] ~= removeValue then
|
||||
table.insert(new, list[i])
|
||||
end
|
||||
end
|
||||
|
||||
return new
|
||||
end
|
||||
|
||||
return Immutable
|
||||
Reference in New Issue
Block a user