Module:Dictionary
跳到导航
跳到搜索
- local dictionary = {}
- function dictionary.create(keycomparer, dic)
- local keyvaluepairs = {}
- local comparer
- if dic == nil then
- comparer = keycomparer or function(k1, k2) return k1 == k2 end
- else
- comparer = keycomparer or dic.comparer
- for i, pair in ipairs(dic.keyvaluepairs) do
- table.insert(keyvaluepairs, { key = pair.key, value = pair.value })
- end
- end
- local prototype = { comparer = comparer, keyvaluepairs = keyvaluepairs }
- prototype.add = dictionary.add
- prototype.remove = dictionary.remove
- prototype.hasKey = dictionary.hasKey
- prototype.enum = dictionary.enum
- prototype.getValue = dictionary.getValue
- prototype.setValue = dictionary.setValue
- prototype.tryAdd = dictionary.tryAdd
- prototype.tryRemove = dictionary.tryRemove
- prototype.tryGetValue = dictionary.tryGetValue
- prototype.trySetValue = dictionary.trySetValue
- return prototype
- end
- function dictionary.add(dic, key, value, ...)
- if dic == nil then error("参数dic为空。") end
- if dic:hasKey(key, ...) then
- error("字典中已经存在这个键。")
- end
- table.insert(dic.keyvaluepairs, { key = key, value = value })
- return dic
- end
- function dictionary.tryAdd(dic, key, value, ...)
- return pcall(dictionary.add, dic, key, value, ...)
- end
- function dictionary.remove(dic, key, ...)
- if dic == nil then error("参数dic为空。") end
- local index
- for i, pair in ipairs(dic.keyvaluepairs) do
- if dic.comparer(pair.key, key, ...) then
- index = i
- break
- end
- end
- if index ~= nil then table.remove(dic.keyvaluepairs, index) end
- return dic
- end
- function dictionary.tryRemove(dic, key, ...)
- return pcall(dictionary.remove, dic, key, ...)
- end
- function dictionary.enum(dic)
- if dic == nil then error("参数dic为空。") end
- return ipairs(dic.keyvaluepairs)
- end
- function dictionary.hasKey(dic, key, ...)
- if dic == nil then error("参数dic为空。") end
- for i, pair in ipairs(dic.keyvaluepairs) do
- if dic.comparer(pair.key, key, ...) then
- return true
- end
- end
- return false
- end
- function dictionary.getValue(dic, key, ...)
- if dic == nil then error("参数dic为空。") end
- for i, pair in ipairs(dic.keyvaluepairs) do
- if dic.comparer(pair.key, key, ...) then
- return pair.value
- end
- end
- error("字典中找不到这个键。")
- end
- function dictionary.tryGetValue(dic, key, ...)
- return pcall(dictionary.getValue, dic, key, ...)
- end
- function dictionary.setValue(dic, key, value, ...)
- if dic == nil then error("参数dic为空。") end
- local index
- for i, pair in ipairs(dic.keyvaluepairs) do
- if dic.comparer(pair.key, key, ...) then
- index = i
- break
- end
- end
- if index == nil then
- error("字典中找不到这个键。")
- else
- dic.keyvaluepairs[index] = value
- end
- end
- function dictionary.trySetValue(dic, key, value, ...)
- return pcall(dictionary.setValue, dic, key, value, ...)
- end
- return dictionary