1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by Dee.
--- DateTime: 2019/3/7 14:00
--- 快速遍历修改,低效的增删
---
vector = vector or {}
function vector.create()
local t = {}
---尾添加元素(高效)
function t:add(v)
rawset(self, #self + 1, v)
end
---插入(低效)
---@param k 位置
---@param v 值
function t:insert(k, v)
assert(k > 0 and k <= #self, "outrange of vector")
local cnt = #self
for i = cnt, k, -1 do
rawset(self, i+1, self[i])
end
rawset(self, k, v)
end
---值的索引
---@return -1不存在
function t:indexOf(i_v)
assert(type(self) == 'table')
local ret = -1
local cnt = #self
for i = 1, #self do
if self[i] == i_v then
ret = i
end
end
return ret
end
---是否存在某元素
function t:contains(v)
assert(type(self) == 'table')
return self:indexOf(v) ~= -1
end
---根据下标索引移除元素(低效)
function t:removeAt(idx)
assert(idx <= #self)
table.remove(self, idx)
end
---删除值(非贪婪)
---@return 删除位置 -1未删除
function t:remove(v)
local ret = self:indexOf(v)
if ret ~= -1 then
self:removeAt(ret)
end
return ret
end
---删除所有值
function t:removeAll(v)
assert(type(self) == 'table')
error(">>Dee: wait ...")
end
---排序
function t:sort(comparer)
assert(type(self) == 'table')
table.sort(self, comparer)
end
---匹配
---@param 匹配函数
---@return idx,value
function t:find(matcher)
assert(type(self) == 'table')
local _idx, _value = -1, nil
local cnt = #self
for i = 1, cnt do
if matcher(i, self[i]) then
_value = self[i]
_idx = i
break
end
end
return _idx, _value
end
--------------------------------metatable---------------------------------------
t.__newindex = function(i_t,k,v)
error(">> Dee: [], replace with add()")
end
t.__tostring = function(i_t)
return table.concat(i_t, ',')
end
t.__pairs = function(...)
error(">> Dee: Limited access")
end
setmetatable(t, t)
-----------------------------------------------------------------------
return t
end
return vector
|