关于数据类型未知或者将会不断增加的解决方案
有时侯会面临未来不知数据会有多少变数的问题, 而把所以变数一次性全部写上, 或者在面临变数时,不断修改类源码以扩充新的数据记录显然不是一个好方法. 这时侯,可以采用索引+绑定方式解决: 类源码的数据只有一个用于区分事物的uid(索引用), 然后在后续的模块中,需要扩展新的数据,则对这个uid进行各类绑定. 这样,新增的数据需求不会修改到旧有的数据需求.
[cpp]
function get_t_set_by_i( _t )
if nil == _t then
return _t
end
local t = {}
for i,v in pairs(_t) do
t[table.getn(t) + 1] = i
end
return t
end
function get_t_set_by_v( _t )
if nil == _t then
return _t
end
local t = {}
for i,v in pairs(_t) do
t[table.getn(t) + 1] = v
end
return t
end
function myPrint(_x, _y)
print(_x)
end
function get_valid_t( _t )
local t = {}
local len = table.getn(_t)
for i=1, len do
if nil ~= _t[i] then
t[ table.getn(t) + 1] = _t[i]
end
end
return t
end
--------------------------------------------- 索引 --------------------------------------------
--索引管理
function new_index_manager()
local t_index = {}
local public = {}
--创建索引
function public.create_index()
for i=1, 9999999 do
if nil == t_index[i] then
t_index[i] = 1
return i
end
end
myPrint("索引资源用尽", 1)
return nil
end
--索引是否有效
function public.is_valid_index( _index )
if nil ~= t_index[_index] then
return true
end
return false
end
--删除索引
function public.delete_index( _index )
t_index[_index] = nil
end
return public
end
G_FB_Buf_Index = new_index_manager()
--1:N绑定器
function new_map_for_1_and_N()
local left_set = {}
local right_set = {}
local public = {}
--绑定索引和UID( 1:N )
function public.bind_left_and_right( _left, _right )
if nil == left_set[_left] then
left_set[_left] = {}
end
local len = table.getn(left_set[_left])
for i=1, len do
if left_set[_left][i] == _right then
return
end
end
left_set[_left][table.getn(left_set[_left])+1] = _right
right_set[_right] = _left
end
--清除绑定
function public.clear_left_and_right( _left )
local t_right = public.get_t_map_by_fb_buf_index( _left )
local len = table.getn( t_right )
for i=1, len do
right_set[ t_right[i] ] = nil
end
left_set[_left] = nil
end
--清除绑定
function public.clear_right( _left, _right )
right_set[_right] = nil
local t_right = left_set[_left]
local len = table.getn( t_right )
for i=1, len do
if t_right[i] == _right then
t_right[i] = nil
end
end
end
--通过left获得rigth表
function public.get_t_right_by_left( _left )
return get_valid_t( left_set[_left] )
end
--通过right获得left
function public.get_left_by_right( _right )
return right_set[ _right ]
end
return public
end
--buf绑定器
function new_map_for_index_to_buf()
local index_set = {}
local public = {}
--绑定buf
function public.bind_index_to_buf( _index, _buf )
index_set[ _index ] = _buf
end
--清除绑定
function public.clear_index_to_buf( _index )
index_set[_index] = nil
en
补充:软件开发 , C++ ,