utils for lua

2013-7-6 雨辰 Lua

--[[
-- filename: utils.lua
--
-- * common functions put here
--
--
--]]


-- ---------------------- for array ----------------------------
--[[
--  func: 函数把两个或多个数组合并为一个数组,并去掉重复项
--
-- params:
--		@t1		array		key-value in table is int
--]]
function array_merge(t1, t2, ...)
	if(t1 == nil and t2 == nil) then
		return {}
	end
	print("t1.len",#t1)
	print("t2.len",#t2)
	function _merge(a, b)
		local c = {}

		if(a == nil) then
			return b
		end

		if(b == nil) then
			return a
		end

		for k in ipairs(a) do
			print("---",k)
			c[k] = a[k]
		end
		for i in ipairs(b) do
			print("---",b)
			table.insert(c, b[i])
		end

		return c
	end

	local c = _merge(t1, t2)
	local arg = {...}
	for n in ipairs(arg) do
		c = _merge(c, arg[n])
	end

	--unique
	c = array_unique(c)

	return c
end

--[[
-- func: 去除函数中的重复项,并返回结果数组
--
-- params:
--		@array		array		key-value in table is int
--]]
function array_unique(array)
	local len = table.getn(array)
	local i = 1
	local j = 1

	while i <= len do
		j = i+1
		while j <= len  do
			if(array[i] == array[j]) then
			--	print("remove:", j)
				table.remove(array, j)
				i=i-1
				j=j-1
				len=len-1
			end

			j=j+1
		end
		i=i+1
	end
	return array
end

--[[
-- func: 求两个或多个数组的交集数组, 结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值
--
-- params:
-- 			@array1		must have
-- 			@array2		must have
--				....
-- return:
--				@array
--]]
function array_intersect(array1, array2, ...)
	if(array1 == nil or array2 == nil) then
		return {}
	end

	function _intersect(a, b)
		local c = {}
		for k in ipairs(a) do
			for i in ipairs(b) do
				if ( a[k] == b[i] ) then
					table.insert(c,  b[i])
				end
			end
		end
		return c
	end

	local c = _intersect(array1, array2)
	local arg = {...}
	for n in ipairs(arg) do
		if(table.getn(c) == 0) then
			break
		end
		c = _intersect(c, arg[n])
	end

	return c
end


--[[
-- func: 删除表中的值
--
-- params:
-- 			@array		表
-- 			@value		值
--				....
-- return:如果成功则返回被移除的值;如果失败则返回nil
--				
--]]
function array_remove_element(array, value)
	-- body
	for i,v in ipairs(array) do
		if v == value then
			table.remove(array, i)
			return v
		end
	end
	return nil
end

--[[
-- func: 哈希表中是否已经存在key 的值
--
-- params:
-- 			@array		表
-- 			@key	    键
--				....
-- return:存在就返回true,没有就返回false
--				
--]]
function array_have_key(array, key)
   local res = false
   if array ~= nil then
       for i, v in pairs(array) do
		if i == key then
			res = true
		end
       end
   end
   return res
end


--[[
	获取系统当前时间
--]]
-- function getCurrentTime()    
-- 	local tv =CCTime:gettimeofdayCocos2d(&tv, NULL);
-- 	 return tv.tv_sec * 1000 + tv.tv_usec / 1000;   
-- end 

--[[
-- func: 获取哈希表的大小
--
-- params:
-- 			@table		表
-- return:返回哈希表的容量
--				
--]]
function get_table_size(table)
	local res = 0
	if table ~= nil then
		for key,obj in pairs(table) do
		res = res + 1
		end
	end
	return res
end

--[[
-- func: 获取哈希表的所有value
--
-- params:
-- 			@table		表
-- return:返回哈希表的value组成的新table
--				
--]]
function get_table_valueTable(m_table)
	local valueTable = {}
	if m_table ~= nil then
		for key, obj in pairs(m_table) do
		table.insert(valueTable, tostring(obj))
		end
	end
	return valueTable
end

--[[
-- func: 获取哈希表的所有key
--
-- params:
-- 			@table		表
-- return:返回哈希表的key组成的新table
--				
--]]
function get_table_keyTable(m_table)
	local keyTable = {}
	if m_table ~= nil then
		for key, obj in pairs(m_table) do
		table.insert(keyTable, tostring(key))
		end
	end
	return keyTable
end

--[[
-- func: 添加对象到表
--
-- params:
-- 			@table		表
-- return:table
--				
--]]
function add_table_object(m_table, obj)
    local table  = m_table
    table.insert(table, 1, obj)
    return table
end

--[[
-- func: 获取number的整数部分
--
-- params:
-- 			@number		浮点数字
-- return: 浮点数字的整数部分
--				
--]]
function getNumberPart(number)
    if number <= 0 then
       return math.ceil(number)
    end

    if math.ceil(number) == number then
       number = math.ceil(number)
    else
       number = math.ceil(number) - 1
    end
    return number
end

 

标签: lua

发表评论:

朱文华 joyimp|@2011-2020 京ICP备16030765号