lua字符串与表的使用

Lua字符串对象

1:字符串加法: 

        (1)“str1” .. “str2”  (2)字符串与数相加;
2: 数字转字符串:  
          local a = 10; a = “” .. a;    tostring(number)
   字符串转数字: 
          tonumber(“字符串”)
3: 字符串接口:
     string.len(): 字符串的字节数
    string.rep(s, n) : 返回重复n次字符串s的串
    string.lower(s): 将大写全部都转成小写;
    string.upper(s): 将小写转为大写; 
    string.sub(s,i,j): 从第i个到第j个之间的字符串,和其他的不一样,索引从1开始不是从0开始;
    string.format(); 和C语言printf一样,格式化输出数据;
    string.find: 子串查找函数;

    string.gsub: 字符串替换函数, string.gsub("hello", "l", "n", 1); 替换的个数 

格式化转义码

%c - 接受一个数字, 并将其转化为ASCII码表中对应的字符
%d, %i - 接受一个数字并将其转化为有符号的整数格式
%o - 接受一个数字并将其转化为八进制数格式
%u - 接受一个数字并将其转化为无符号整数格式
%x - 接受一个数字并将其转化为十六进制数格式, 使用小写字母
%X - 接受一个数字并将其转化为十六进制数格式, 使用大写字母
%e - 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
%E - 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
%f - 接受一个数字并将其转化为浮点数格式
%g(%G) - 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
%q - 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
%s - 接受一个字符串并按照给定的参数格式化该字符串


1: Lua没有数组,但是表可以代替数组的功能(数组部分与非数组部分);
    Lua表的数组部分的索引是从1开始的, 1, 2, 3 ...称连续的索引;
    Lua表的连续索引的长度(数组部分);  #表的名字;
    Lua表支持key, value模式; 


4: 遍历lua表;
     for i=1, #(tbtest) do      
    end 
    for key, value in ipairs(tbtest) do      --连续部分
    end 
    for key, value in pairs(tbtest) do      --Hash排序
    end 


表的接口

1: table.insert(table, pos, value): 
     在table的数组部分指定位置(pos)插入值为value的一个元素, pos参数可选, 默认为数组部分末尾
2: table.remove(table, pos)
    函数删除并返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起
3:  table.sort(table, 比较函数): 对table进行排序
4: table.getn(table)返回表中元素的个数; -->数组部分



-- 字符串相加使用 ..
local lhs_str = "Hello"
local rhs_str = " World!!!"

local str = lhs_str .. rhs_str

print(str)

-- 字符串和基本数据相加

print(lhs_str .. 8)

-- 数字转字符串
local value = 7
print( "" .. value)


-- 字符串转数字
print( tonumber( "9.6"))

--常用字符串接口

str = "helloworld!!!"
print( string.len(str))

str = string.rep( "hello", 3) --重复
print(str)


str = "AJFJKEJFE!!!" --大写转小写
str = string.lower(str)
print(str)


str = string.upper(str) --小写转大写
print(str)


str = string.sub( "helloworld", 2, 5) --截取字符串 从2开始到5, 索引是从1开始
print(str)


-- 格式化输出
local date = string.format( "%d-%d-%d", 2018, 05, 19)
print(date)


--查找
str = "helloworld"
local index = string.find(str, "world") --查找字符串开始的索引位置,索引从1开始,不是从0开始的
print(index)




--字符串替换
str = "helloowlld"
str = string.gsub(str, "ll", "ww")
print(str)


--字符串替换
str = "helloowlld"
str = string.gsub(str, "ll", "ww", 1) --第4个参数,是替换几个,如果没有指定就是替换全部
print(str)



---表 lua表代替数组
print( "---------------------------------")
print( "---------------------------------")


-- 数组部分, 索引从1开始(lua特色)
local list_table = { 1, 2, 3, 4, 5}
print(list_table[ 1],list_table[ 2],list_table[ 3])

list_table[ 11] = 11
list_table. test_key = "test_value"

print(#list_table) --返回lua表里面数组部分的长度 ,必须要求索引是连续的

print(list_table[ 11])
print(list_table[ "test_key"])


print( "---------------------------------")
print( "---------------------------------")

--遍历lua表里面所有元素


--遍历lua里面数组部分的元素
local index = 1
for index = 1, #list_table do
print(list_table[index])
end
print( "##############")


local k,v
for k,v in ipairs(list_table) do
print(k,v)
end

--end


print( "##############")

--遍历表里里面所有的数据
for k,v in pairs(list_table) do
print(k,v)
end
--end


--数组一定是连续的整数索引,否则就不算数组


-- 表的接口
table.insert(list_table, 8) --数组插入数据

--如果不指定pos就插入到数组部分的尾部

table.insert(list_table, 2, 8) --往指定位置插入数据

table.remove(list_table, 2) --删除第二个位置




for k,v in pairs(list_table) do
print(k,v)
end
print( "##############")

print(table. getn(list_table)) --返回表里数组的元素个数,和#功能是类似的


print( "##############")

--对表进行排序

local array_data = { 3, 2, 5, 7, 9, 6}
table.sort(array_data)
for k,v in pairs(array_data) do
print(k,v)
end

--使用自己的比较函数进行排序

local function coml( lhs, rhs)
if lhs < rhs then
return false
else
return true
end
end


print( "##############")
table.sort(array_data,coml) --自定义排序函数


for k,v in pairs(array_data) do
print(k,v)
end


-- 随机的打乱一个数组
-- lua排序中的比较函数要保证排序的稳定性
--[[
local function cmp_random(lhs,rhs)
local v = math.random()
if tonumber(v) < 0.5 then
return true
else
return false
end
end
print("##############")


table.sort(array_data,cmp_random) --随机排序


for k,v in pairs(array_data) do
print(k,v)
end
]]


猜你喜欢

转载自blog.csdn.net/qq_28710983/article/details/80633543