lua字符串转数组(lua中对数组排序的问题)

本文目录
- lua中对数组排序的问题
- lua入门笔记7 字符串库
- lua 中怎样将string类型转换为byte数组
- lua实现函数 功能是对输入的字符串数组排序比如:输入{“ab“,“bc“,“asd“,“qwe“},输出为{“bc“,“ab“,“qwe
- lua,bytes怎么换成成string,使用string.char循环除外
- lua面向对象:类中定义数组问题
- lua中怎么传入多维数组
- LUA 数组遍历问题
- lua如何从字符串提取某一个字符
lua中对数组排序的问题
.no的含义和是一样的。所以改成下面这样
function orderby(x,y)--x是数组,y是列名用字符串,比如"no"
maxn = table.getn(x)
for j=1,maxn ,1 do
for i = j,maxn,1 do
if x then
x
end
end
end
return x
end
lua入门笔记7 字符串库
Lua 中的 string 和 c #中相同, string 类型的值一旦改变,便要为新值开辟空间,并指向此空间。也就是说每次对 string 变量进行更改操作时返回的是一个新的值,下面的函数中就不再过多去说明了。
其他还有很多这里只是简单地举几个例子。
Lua 中由于考虑大小,没有支持正则表达式。而采用了自己的模式匹配。
string.find 函数用于在一个给定的目标字符串中搜索一个模式。最简单的是搜索单词。如果赵傲这个单词,他就会返回单词的其实索引和结束所用,如果没找到则返回 nil
如果匹配成功,就可以用 string,find 的返回值结果来调用 string.sub 来提取出目标字符串中匹配于该模式的那部分子串。
string.find 还有一个可选的第三参数,他是一个索引,告诉函数应从目标字符串的那个位置开始搜索。
函数 string.math 和函数 string.find 在某种意义上很相似,它也是用一个在字符串中搜索的一种模式。不同的是, string.math 返回的是目标字符串中模式匹配的那部分子串,而并非位置。
对于固定的模式,该函数可能没有什么意义例如 "hello" 。但当使用变量模式是,它的特性就显现出来了。
string.gusb 函数有3个参数:目标字符串、模式、替换字符串 作用就是将所有出现该模式的地方替换为替换字符串
另外还有可选的第四个参数,可以限制替换的次数
函数是 string.gsub 还有一种结果,即实际替换的次数,例如下面就是一种统计字符串中空格数量的简单方法
string.gmatch 会返回一个函数。通过这个函数可以遍历到一个字符串中所有出现指定摸式的地方。
其中模式 "%a+" 表示匹配一个或多个字母字符的序列(也就是单词),这里会遍历其中所有的单词,并存入其中。在模式中"点"具有特殊的意义,因此若要表示一个点必须写为 "%."
介意用字符分类创建更多有用的模式。字符分类就是模式中的一项。可以与一个热顶级和中的任意字符相匹配。例如分类"%d"可匹配任意数字。例如可以用
"%d%d/%d%d/%d%d%d%d" 来搜索符合 "dd/mm/yyyy" 格式的日期
下面是所有的字符分类
这些分类的大写行使表示他们的补集,例如 "%A" 表示所有非字母字符
在模式里,还有一些字符串被称为“魔法字符”他们有着特殊的含义。这些魔法字符有
{ } . % + - * ? ^ $
字符串 % 作为这些魔法字符的转义符,例如 "%." 表示匹配一个点 "%%" 表示匹配字符 "%" 不仅可以把 "%" 用于魔法字符,还可以用于其他所有非字母数字的字符。当不确定某个字符是不是需要被转义是,应该直接前置一个转义符。
对于 lua 来说,模式就是普通的字符串。并想起他字符串一样遵循相同的规则。只有模式函数才会解释它们,此时参会将 "%" 当做转义符来处理。
在一堆放括号内将不同的字符分类或者单个字符组合起来,即可创造出属于用户自己的字符分类,这种新的字符分类叫做 字符集(char-set) 。例如,字符集 表示匹配方括号本身。如果需要统计一段文本中元音的数量,可以这么写
在字符集中表示一段字符范围的做法是写出自付范围的第一个字符和最后一个字符并用横线连接它们,但这种形式用的较少因为大部分常用的字符范围都已经预定义好了。如 即为 %d
简答
也可以通过修饰符来藐视模式中的重复可选部分。lua提供四种修饰符
“+” 修饰符科普配属于字符串分类的一个或多个字符。他总是获取与模式相匹配的最长序列,模式 "%a+" 表示一个或多个字母,即单词:
模式 "%d+" 匹配一个或多个数组(一个整数)
修饰符 "*" 类似于 "+" ,但它还接受出现0次的情况。一种典型用途是匹配一个模式不同部分之间的空格。 比如说像匹配 () 或者 ( ) 这样的一对圆括号,可以用 "%(%s*%)" 其中的 %s* 可以匹配0到多个空格
另一个示例是使用模式 "*" 来匹配lua中的标识符,标识符是一个由字母或下划线开始,伴随0到多个下划线、字母或数字的序列。
修饰符 "-" 和 "*" 一样,也是用于匹配0个或多个字符的。不过他会匹配最短的子串。虽然看似二者没什么差别但效果截然不同。如果使用 "-" 总是匹配空串。假设要查找一个c程序中的注释,通常会首先尝试 "/%*.*%/" 然后由于 ".* "会尽可能的扩展,因此程序中第一个 "/*" 只会与最后一个 "*/" 相匹配
但若使用 ".-"话就会变成这样
修饰符"?"用于匹配一个可选的字符。例如要在一段文本中寻找一个整数,而这个整数可以包括一个可选的正负号。那么适用模式"?%d+"就可以完成这项任任务。他可以匹配项
"-12" "23" "+1000"这样的数字,而""是一个匹配’+’号和’-’号的字符分类,后面的’?’说明可这个符号是可选的。与其他系统不同的是,Lua中的修饰符只能用用于一个字符分类,无法对一组分类进行修饰。无法写出一个匹配可选打次的模式。
如果一个模式以一个’^’起始,那么他只会匹配目标字符串的开头部分。如果模式以’$’结尾,他只会匹配目标字符串的结尾部分。
在模式中,还可以用"%b",用于匹配成对的字符。他的写法是"%b《x》《y》" 其中《x》和《y》是两个不同的字符串,《x》作为一个起始字符,《y》是作为一个结束字符。例如模式"%b()"可匹配以’(’开始,并以’)’结束的子串s
Lua 中的 string 和 c #中相同, string 类型的值一旦改变,便要为新值开辟空间,并指向此空间。也就是说每次对 string 变量进行更改操作时返回的是一个新的值,下面的函数中就不再过多去说明了。
其他还有很多这里只是简单地举几个例子。
Lua 中由于考虑大小,没有支持正则表达式。而采用了自己的模式匹配。
string.find 函数用于在一个给定的目标字符串中搜索一个模式。最简单的是搜索单词。如果赵傲这个单词,他就会返回单词的其实索引和结束所用,如果没找到则返回 nil
如果匹配成功,就可以用 string,find 的返回值结果来调用 string.sub 来提取出目标字符串中匹配于该模式的那部分子串。
string.find 还有一个可选的第三参数,他是一个索引,告诉函数应从目标字符串的那个位置开始搜索。
函数 string.math 和函数 string.find 在某种意义上很相似,它也是用一个在字符串中搜索的一种模式。不同的是, string.math 返回的是目标字符串中模式匹配的那部分子串,而并非位置。
对于固定的模式,该函数可能没有什么意义例如 "hello" 。但当使用变量模式是,它的特性就显现出来了。
string.gusb 函数有3个参数:目标字符串、模式、替换字符串 作用就是将所有出现该模式的地方替换为替换字符串
另外还有可选的第四个参数,可以限制替换的次数
函数是 string.gsub 还有一种结果,即实际替换的次数,例如下面就是一种统计字符串中空格数量的简单方法
string.gmatch 会返回一个函数。通过这个函数可以遍历到一个字符串中所有出现指定摸式的地方。
其中模式 "%a+" 表示匹配一个或多个字母字符的序列(也就是单词),这里会遍历其中所有的单词,并存入其中。在模式中"点"具有特殊的意义,因此若要表示一个点必须写为 "%."
介意用字符分类创建更多有用的模式。字符分类就是模式中的一项。可以与一个热顶级和中的任意字符相匹配。例如分类 "%d" 可匹配任意数字。例如可以用
"%d%d/%d%d/%d%d%d%d" 来搜索符合"dd/mm/yyyy"格式的日期
下面是所有的字符分类
这些分类的大写行使表示他们的补集,例如"%A"表示所有非字母字符
在模式里,还有一些字符串被称为“魔法字符”他们有着特殊的含义。这些魔法字符有
{ } . % + - * ? ^ $
字符串 % 作为这些魔法字符的转义符,例如 "%." 表示匹配一个点 "%%" 表示匹配字符 "%" 不仅可以把 "%" 用于魔法字符,还可以用于其他所有非字母数字的字符。当不确定某个字符是不是需要被转义是,应该直接前置一个转义符。
对于 lua 来说,模式就是普通的字符串。并想起他字符串一样遵循相同的规则。只有模式函数才会解释它们,此时参会将 "%" 当做转义符来处理。
在一堆放括号内将不同的字符分类或者单个字符组合起来,即可创造出属于用户自己的字符分类,这种新的字符分类叫做 字符集 (char-set) 。例如,字符集 表示匹配方括号本身。如果需要统计一段文本中元音的数量,可以这么写
在字符集中表示一段字符范围的做法是写出自付范围的第一个字符和最后一个字符并用横线连接它们,但这种形式用的较少因为大部分常用的字符范围都已经预定义好了。如 即为 %d
简答
也可以通过修饰符来藐视模式中的重复可选部分。 lua 提供四种修饰符
“+” 修饰符科普配属于字符串分类的一个或多个字符。他总是获取与模式相匹配的最长序列,模式 "%a+" 表示一个或多个字母,即单词:
模式 "%d+" 匹配一个或多个数组(一个整数)
修饰符 "*" 类似于 "+" ,但它还接受出现0次的情况。一种典型用途是匹配一个模式不同部分之间的空格。 比如说像匹配 () 或者 ( ) 这样的一对圆括号,可以用 "%(%s*%)" 其中的 %s* 可以匹配0到多个空格
另一个示例是使用模式 "*" 来匹配 lua 中的标识符,标识符是一个由字母或下划线开始,伴随0到多个下划线、字母或数字的序列。
修饰符 "-" 和 "*" 一样,也是用于匹配0个或多个字符的。不过他会匹配最短的子串。虽然看似二者没什么差别但效果截然不同。如果使用 "-" 总是匹配空串。假设要查找一个c程序中的注释,通常会首先尝试 "/%*.*%/" 然后由于 ".*" 会尽可能的扩展,因此程序中第一个 "/*" 只会与最后一个 "*/" 相匹配
但若使用 ".-" 话就会变成这样
修饰符 "?" 用于匹配一个可选的字符。例如要在一段文本中寻找一个整数,而这个整数可以包括一个可选的正负号。那么适用模式 "?%d+" 就可以完成这项任任务。他可以匹配项
"-12" "23" "+1000" 这样的数字,而 "" 是一个匹配 ’+’ 号和 ’-’ 号的字符分类,后面的 ’?’ 说明可这个符号是可选的。与其他系统不同的是, Lua 中的修饰符只能用用于一个字符分类,无法对一组分类进行修饰。无法写出一个匹配可选打次的模式。
如果一个模式以一个 ’^’ 起始,那么他只会匹配目标字符串的开头部分。如果模式以 ’$’ 结尾,他只会匹配目标字符串的结尾部分。
在模式中,还可以用 "%b" ,用于匹配成对的 字符 。他的写法是 "%b《x》《y》" 其中 《x》 和 《y》 是两个不同的字符串, 《x》 作为一个起始字符, 《y》 是作为一个结束字符。例如模式 "%b()" 可匹配以 ’(’开始,并以’)’ 结束的子串
s="a (enclosed (in) parenthesses) line"
print(string.gsub(s,"%d()","") --》a line
这种模式的典型用法包括 "%b()" "%b" "%b{}" "%b《》"
捕获功能可根据一个模式从目标字符串中抽出匹配与该模式的内容。在指定捕获时,应将模式中需要捕获的部分写到一对圆括号内。
这里括号中的值为匹配两个单词,括号外是首先匹配空格然后匹配等号继续匹配空格。并且会把表达式中用 () 括起来的值返回。
lua 中怎样将string类型转换为byte数组
如果字符串没有utf-8的话。
local str = "123456789"
local table = {}
for i=1,#name do
table = string.sub(name,i,i)
end
如果有utf-8
function getUTFByte()
str1 = "OK 我赢了"
i = 1
while true do
c = string.sub(str1,i,i)
b = string.byte(c)
if b 》 128 then
print(string.sub(str1,i,i+2))
i = i + 3
else
if b == 32 then
print("empty")
else
print(c)
end
i = i + 1
end
if i 》 #str1 then
break
end
end
end
第二种是输出,,你创建一个table把输出的内容加到table就好了。
lua实现函数 功能是对输入的字符串数组排序比如:输入{“ab“,“bc“,“asd“,“qwe“},输出为{“bc“,“ab“,“qwe
t={"ab","bc","asd","qwe"}
table.sort(t)
for i,v in pairs(t) do
print(v)
end
lua,bytes怎么换成成string,使用string.char循环除外
一般来说,就是用string.char
但是不需要循环 你可以直接将一大串东西直接转化成char
print(string.char(112,113,114,115))
如果你的值是在一个table里 你可以使用unpack
local t = {112,113,114,115}
print(string.char(unpack(t)))
根据你的lua实际版本决定unpack怎么使用
lua面向对象:类中定义数组问题
table是Lua中的hashmap(包括其实现方式也是). 由于其包含所有数组的功能, 所以可以认为table是扩展了的数组. Lua没有再额外提供单独的数组类型.
用以下的语句声明一个空的table:
newTable = {}
可以用以下的方式向table中添加值:
newTable = "14"
可以使用字符串形式的key值, 但必须在字符串前后添加双引号("").
newTable = "April 14"
也可以在首次声明table的同时进行赋值, 参考下面的语句:
newTable = {
= value1,
lua中怎么传入多维数组
用luajit里面的ffi库来实现传入多维数组;
lua就是个玩的语言,直接把地址按lua_pushnumber给lua,然后用ffi.cast转成要的数组指针类型可以了;
Lua 是一个小巧的脚本语言。
Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。
LUA 数组遍历问题
Function table.setn was deprecated. Function table.getn corresponds to the new length operator (#); use the operator instead of the function. (See compile-time option LUA_COMPAT_GETN in luaconf.h.)
2.5.5 - 取长度操作符
取长度操作符写作一元操作 #。 字符串的长度是它的字节数(就是以一个字符一个字节计算的字符串长度)。
table t 的长度被定义成一个整数下标 n 。 它满足 t 为 nil ,n 就可能是零。 对于常规的数组,里面从 1 到 n 放着一些非空的值的时候, 它的长度就精确的为 n,即最后一个值的下标。 如果数组有一个“空洞” (就是说,nil 值被夹在非空值之间), 那么 #t 可能是指向任何一个是 nil 值的前一个位置的下标 (就是说,任何一个 nil 值都有可能被当成数组的结束)。
***隐藏网址***
lua如何从字符串提取某一个字符
lua里不像c一样区分字符串和字符。
比如:
b = a:match("gig.-gvt") --提取包含头尾的字符串
print(b:sub(4, string.len(b)-3)) --去除头尾
总的来说通过string.match或者string.sub来提取字符串,结合patterns(弱化版的正则表达式)进行通配;具体得视源字符串的数据特征而定。
function string.split(input, delimiter)
input = tostring(input)
delimiter = tostring(delimiter)
if (delimiter==’’) then return false end
local pos,arr = 0, {}
-- for each divider found
for st,sp in function() return string.find(input, delimiter, pos, true) end do
table.insert(arr, string.sub(input, pos, st - 1))
pos = sp + 1
end
table.insert(arr, string.sub(input, pos))
return arr
end
扩展资料:
Lua还具有其它一些特性:同时支持面向过程(procedure-oriented)编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象;语言内置模式匹配;
闭包(closure);函数也可以看做一个值;提供多线程(协同进程,并非操作系统所支持的线程)支持;通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象,虚函数,继承和重载等。

更多文章:
form表单制作(为什么制作的form表单会在网页显示中多出一行)
2026年10月11日 09:10
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50



