Lua工具类
1、打印table
--一个用以打印table的函数
function print_r (t, name)
print(pr(t,name))
end function pr (t, name, indent)
local tableList = {}
function table_r (t, name, indent, full)
local id = not full and name or type(name)~="number" and tostring(name) or '['..name..']'
local tag = indent .. id .. ' = '
local out = {} -- result
if type(t) == "table" then
if tableList[t] ~= nil then
table.insert(out, tag .. '{} -- ' .. tableList[t] .. ' (self reference)')
else
tableList[t]= full and (full .. '.' .. id) or id
if next(t) then -- Table not empty
table.insert(out, tag .. '{')
for key,value in pairs(t) do
table.insert(out,table_r(value,key,indent .. ' ',tableList[t]))
end
table.insert(out,indent .. '}')
else table.insert(out,tag .. '{}') end
end
else
local val = type(t)~="number" and type(t)~="boolean" and '"'..tostring(t)..'"' or tostring(t)
table.insert(out, tag .. val)
end
return table.concat(out, '\n')
end
return table_r(t,name or 'Value',indent or '')
end
2、三元运算符
(a and {b} or {c})[] --如果a为true的话,那么返回b,否则返回c
3、判断一个table是否包含某个键
function ui_jchd_list.AddToSet(set, key)
set[key] = true
end function ui_jchd_list.RemoveFromSet(set, key)
set[key] = nil
end function ui_jchd_list.SetContains(set, key)
return set[key] ~= nil
end
4、获取本地时间(不要用其他的方式,不然有可能在苹果设备上显示错误)
local ctime = os.date("%Y-%m-%d", os.time())
因为时区的关系,我们获取本地时间要通过如下方式获取:
local function getTimeZone( )
local now = os.time()
local zone= os.difftime(now, os.time(os.date("!*t", now)))
return zone
end local function getLocalTime( time,zone )
local localTime = time-zone*+getTimeZone()
return localTime
end
--北京为东八区
local time1 = getLocalTime(os.time(),)
print(os.date('%H:%M',time1))
--不能简简单单通过下面的方式获取,自己可以通过改变电脑的时间时区来测试就知道了(但是客户端应该有个getServerTime函数来获取服务器的本地时间,而不是拿客户端的本地时间去计算,服务端时间每隔一分钟应该同步到客户端一次)
print(os.date("%H:%M",os.time()))
5、拷贝table
function copy_table(ori_tab)
if type(ori_tab) ~= "table" then
return
end
local new_tab = {}
for k,v in pairs(ori_tab) do
local vtype = type(v)
if vtype == "table" then
new_tab[k] = copy_table(v)
else
new_tab[k] = v
end
end
return new_tab
end function deepcopy(object)
local lookup_table = {}
local function _copy(object)
if type(object) ~= "table" then
return object
elseif lookup_table[object] then
return lookup_table[object]
end local new_table = {}
lookup_table[object] = new_table
for index, value in pairs(object) do
new_table[_copy(index)] = _copy(value)
end
return setmetatable(new_table, getmetatable(object))
end
return _copy(object)
end
6、总秒数格式化
--总秒数格式化 传总秒数
function ConfigHelpers.FormatSecond( senconds )
local hour = math.modf(senconds / )
local min = math.modf((senconds - hour * ) / )
local sec = math.modf((senconds - hour * ) % )
if sec < then
sec = ''..sec
end
if min < then
min = ''..min
end
if hour < then
hour = ''..hour
end
return hour..':'..min..':'..sec
end
7、continue
for i = , do
while true do
if i % == then
--这里写continue到的代码
break
end
--这里写没有continue到的代码
break
end
8、今天距离星期几还有几天
--今天距离星期几还有几天(tday[0-6 = Sunday-Saturday])
local function mondayDays( tday )
local today = os.date("%w", os.time()) --今天星期几 %w weekday (3) [0-6 = Sunday-Saturday]
local weeks = {[]=,[]=,[]=,[]=,[]=,[]=,[]=}--这是距离星期一所对应的天数集合
local span = tday -
for k,v in pairs(weeks) do
local t = v + span
weeks[k] = t >= and (t - ) or t
end
return weeks[tonumber(today)]
end
9、删除table中的元素
function RemoveTableItem( tableList , func , removeAll )
local i =
while i <= #tableList do
if func(tableList[i]) then
table.remove(tableList, i)
if removeAll == false then
return
end
else
i = i +
end
end
end
--------------------------测试方法-------------------------------
local list = {, , , , , , , , , , }
RemoveTableItem(list,function ( v )
if v% == then
return true
else
return false
end
end,true)
for i,v in ipairs(list) do
print(i..' = '..v)
end
10、判断字符串中 汉字、字母、数字、其他字符 的个数
--判断字符串中 汉字、字母、数字、其他字符 的个数
M2.util.getCharCount = function(content)
local chineseCount =
local englishCount =
local numberCount =
local otherCount =
local contentArray = string.gmatch(content, ".[\128-\191]*")
for w in contentArray do
local ascii = string.byte(w)
if (ascii >= and ascii <= ) or (ascii>= and ascii <=) then
englishCount = englishCount +
elseif ascii >= and ascii <= then
numberCount = numberCount +
elseif (ascii >= and ascii <= ) or (ascii >= and ascii <= ) or
(ascii >= and ascii <= ) or (ascii >= and ascii <= ) then
otherCount = otherCount +
else
--ios输入法上可以输入系统表情,而此表情的ascii码值正好在这个区间,所以要用字节数来判断是否是中文
--226 227 239 240 为ios系统表情的ascii码值
if string.len(w) == and ascii ~= and ascii ~= and ascii ~= and ascii ~= then
chineseCount = chineseCount +
else
otherCount = otherCount +
end
end
end
return chineseCount,englishCount,numberCount,otherCount
end --判断输入的字符串个数(2个英文字母算一个,1个汉字算一个,如果含特殊字符,返回-1,否则返回正确个数)
M2.util.checkNameCount = function(content)
local chineseCount,englishCount,numberCount,otherCount = M2.util.getCharCount(content)
if otherCount > then
return -
else
local eCount = englishCount /
return chineseCount+eCount+numberCount
end
end
11、相隔时间格式化
function formatDiffTime( endtime , nowtime )
local overtime= day= hour= minu= sec=
local diffSeconds = os.difftime(endtime,nowtime) --os.difftime (t2, t1) 返回t1到t2相差的秒数 if diffSeconds <= then --如果diffSeconds<=0,那么表示结束时间小于现在的时间(已经超时)
overtime =
else
overtime =
end diffSeconds = math.abs(diffSeconds)
if diffSeconds <= then
sec = diffSeconds
day= hour= minu=
else
hour = diffSeconds / (*) -- 总共多少小时
day = hour /
if day >= then
local t1 , t2 = math.modf(day)
day = t1
hour = t2 *
local r1 , r2 = math.modf(hour)
hour = r1
minu = r2 *
local k1 , k2 = math.modf(minu)
minu = k1
sec = math.ceil(k2 * )
else
day =
if hour >= then
local t1 , t2 = math.modf(hour)
hour = t1
minu = t2 *
local r1 , r2 = math.modf(minu)
minu = r1
sec = math.ceil(r2 * )
else
minu = hour *
hour =
local t1 , t2 = math.modf(minu)
minu = t1
sec = math.ceil(t2 * )
end
end
end
return overtime,day,hour,minu,sec
end
Lua工具类的更多相关文章
- lua 工具类(二)
local tonumber_ = tonumber function tonumber(v, base) end function toint(v) return math.round(tonumb ...
- lua 工具类(一)
-- -- Author: My Name -- Date: 2013-12-16 18:52:11 -- csv解析 -- -- 去掉字符串左空白 local function trim_left( ...
- lua学习:lua中“类”的实现
在之前的面试遇到考用lua实现类的题目.现在就补补这块知识点. 我们都知道Lua中的table是一个对象.拥有状态,拥有self,拥有独立于创建者和创建地的生命周期. 一个类就是一个创建对象的模具.L ...
- Android 开源控件与常用开发框架开发工具类
Android的加载动画AVLoadingIndicatorView 项目地址: https://github.com/81813780/AVLoadingIndicatorView 首先,在 bui ...
- Java基础Map接口+Collections工具类
1.Map中我们主要讲两个接口 HashMap 与 LinkedHashMap (1)其中LinkedHashMap是有序的 怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...
- Android—关于自定义对话框的工具类
开发中有很多地方会用到自定义对话框,为了避免不必要的城府代码,在此总结出一个工具类. 弹出对话框的地方很多,但是都大同小异,不同无非就是提示内容或者图片不同,下面这个类是将提示内容和图片放到了自定义函 ...
- [转]Java常用工具类集合
转自:http://blog.csdn.net/justdb/article/details/8653166 数据库连接工具类——仅仅获得连接对象 ConnDB.java package com.ut ...
- js常用工具类.
一些js的工具类 复制代码 /** * Created by sevennight on 15-1-31. * js常用工具类 */ /** * 方法作用:[格式化时间] * 使用方法 * 示例: * ...
- Guava库介绍之实用工具类
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...
随机推荐
- sublime重构变量
选中变量后按下Ctrl+D可批量修改变量名
- Openresty最佳案例 | 汇总
转载请标明出处: http://blog.csdn.net/forezp/article/details/78616856 本文出自方志朋的博客 目录 Openresty最佳案例 | 第1篇:Ngin ...
- CALayer简介(转)
一.简单介绍 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮,一个文本标签,一个文本输入框,一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全 ...
- Spring框架中的IOC?
Spring中的org.springframework.beans包和org.SpringframeWork.context包构成了Spring框架IOC容器的基础.BeanFactory接口提供了一 ...
- js如何判断数据类型
1.最常见的判断方法:typeof console.log(typeof a) ------------> string console.log(typeof b) ------------&g ...
- [USACO5.2]蜗牛的旅行Snail Trails(有条件的dfs)
题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总是从棋盘的左上角出发.棋盘上有空的格子(用“.”来表示)和B 个路障 ...
- Maria-DB
mysql客户端可用选项: -A, --no-auto-rehash 禁止补全 -u, --user= 用户名,默认为root -h, --host= 服务器主机,默认为localhost -p, - ...
- (转)Windows安装和使用zookeeper
(转)原地址https://www.cnblogs.com/shanyou/p/3221990.html 之前整理过一篇文章<zookeeper 分布式锁服务>,本文介绍的 Zookeep ...
- 汇编:采用址表的方法编写程序实现C程序的switch功能
//待实现的C程序 1 void main() { ; -) { : printf("excellence"); break; : printf("good") ...
- JS高级. 01 复习JS基础
1. JavaScript 包含: ____, ____, 和 ____. 2. JavaScript 的基本类型有 ____, ____, 和 ____. 3. JavaScript 的复合类型有 ...