Lua 基础 03 常用函数

news/2024/9/20 17:56:00

Lua 基础相关知识 第三期

字符串

格式化字符串 string.format

通常字符串的连接可以使用 .. 符号,不过当字符串比较长,这样的连接方式就很繁琐,这时可以使用 string.format 进行格式化。

常用的格式控制符:

  • %s 接收一个字符串
  • %d 接收一个数字并转化为有符号整数,%02d 可以显示两位数,个位数时前面补 0,通常用于倒计时格式
  • %f 接收一个数字并转化为浮点数,默认保留 6 位小数,后面补 0,%.2f 可以保留两位小数
local str = "hello"
local result = string.format("str = %s", str)
print(result)

-- str = hello

local minute = 2
local second = 30
local result = string.format("%02d:%02d", minute, second)
print(result)

-- 02:30

local multi = 0.214
local result = string.format("%.2f", multi)
print(result)

-- 0.21

字符串长度 string.len

通常只包含英文的字符串,可以使用 string.len 计算字符串长度。

local str = "hello"
print(string.len(str))  -- 5

如果字符串包含中文,那么就需要使用 utf8.len 计算 ASCII 字符。

可以看到,string.len 把小明的长度计算为 6,utf8.len 则是 2。空格的长度为 1。

local str = "hello 小明"
print(string.len(str))  -- 12
print(utf8.len(str))    -- 8

字符串查找 string.find

在一个字符串中查找指定的子串内容,如果找到第一个匹配的子串(后续的不查找),则返回这个子串的开始位置和结束位置,否则返回 nil。

local str = "hello lua"
local startPos, endPos = string.find(str, "lua")
print(startPos, endPos)

-- 7       9

如果要倒着查找,可以在第三个参数位置指定倒数多少个字符。

例如,倒数一个字符,因为要查找的 lua 是三个字符,只查找一个字符肯定是不匹配的。如果倒数三个字符,就正好能匹配。

local str = "hello lua"
local startPos, endPos = string.find(str, "lua", -1)
print(startPos, endPos)

-- nil     nil

local str = "hello lua"
local startPos, endPos = string.find(str, "lua", -3)
print(startPos, endPos)

-- 7       9

字符串截取 string.sub

指定截取的开始位置和结束位置,如果是负数,则从倒数位置开始截取。

local str = "hello lua"
local strSub = string.sub(str, 1, 3)
print(strSub)

-- hel

local str = "hello lua"
local strSub = string.sub(str, -3)
print(strSub)

-- lua

字符串替换 string.gsub

指定被替换和要替换的字符,还可以指定替换次数,如果没有指定替换次数,默认全部替换。

local str = "hello lua"
local strSub = string.gsub(str, "l", "a", 2)
print(strSub)

-- heaao lua

插入 table.insert

在表的末尾插入新的元素,也可以指定插入的位置。

local names = { "Alice", "Bob" }
table.insert(names, "Jack")  -- 在末尾插入
for key, value in pairs(names) do
    print(key, value)
end

-- 1       Alice
-- 2       Bob
-- 3       Jack

local names = { "Alice", "Bob" }
table.insert(names, 1, "Jack")  -- 在索引为 1 的位置插入(也可以认为是在开头插入)
for key, value in pairs(names) do
    print(key, value)
end

-- 1       Jack
-- 2       Alice
-- 3       Bob

移除 table.remove

从表的末尾移除一个元素,也可以指定移除的位置。

local names = { "Alice", "Bob", "Jack" }
table.remove(names)  -- 移除末尾
for key, value in pairs(names) do
    print(key, value)
end

-- 1       Alice
-- 2       Bob

local names = { "Alice", "Bob", "Jack" }
table.remove(names, 1)  -- 移除索引为 1 的元素(也可以认为是移除开头)
for key, value in pairs(names) do
    print(key, value)
end

-- 1       Bob
-- 2       Jack

排序 table.sort

简单排序。

local nums = { 5, 3, 2, 4, 1 }
table.sort(nums)
for key, value in pairs(nums) do
    print(value)
end

-- 1 2 3 4 5

如果表中嵌套了表,还可以根据表的字段进行排序,需要给 table.sort 传入一个 function 作为参数,在函数内判断字段大小。

local children =
{
    {
        name = "Alice",
        age = 5
    },
    {
        name = "Bob",
        age = 2
    },
    {
        name = "Jack",
        age = 0
    }
}
table.sort(children, function (a, b)
    -- age 从小到大排序
    if a.age < b.age then
        return true
    end
    return false
end)
for key, value in pairs(children) do
    print(value.name, value.age)
end

-- Jack    0
-- Bob     2
-- Alice   5

拼接 table.concat

可以把表中的所有元素拼接成一个字符串,可以指定分隔符,拼接的元素范围。

local names = { "Alice", "Bob", "Jack" }
local str = table.concat(names)  -- 直接拼接
print(str)

-- AliceBobJack

local names = { "Alice", "Bob", "Jack" }
local str = table.concat(names, ",")  -- 用逗号隔开
print(str)

-- Alice,Bob,Jack

local names = { "Alice", "Bob", "Jack" }
local str = table.concat(names, ",", 2, 3)  -- 只拼接索引为 2 和 3 的元素
print(str)

-- Bob,Jack

http://lihuaxi.xjx100.cn/news/2178292.html

相关文章

【算法】决策单调性优化DP

文章目录 决策单调性四边形不等式决策单调性 形式1法1 分治法2 二分队列例题 P3515Solution 形式2例题 P3195Solution 形式3例题 CF833BSolution 形式4例题Solution 后话 决策单调性 四边形不等式 定义: 对于二元函数 w ( x , y ) w(x,y) w(x,y)&#xff0c;若 ∀ a , b , …

uniapp通过Canvas绘制网格(心电图,坐标纸等可用)

本篇文档是Canvas绘制心电图的第一个部分&#xff0c;想了解详情的可以关注后学习交流。 心电图的最底层需要一个网状底层&#xff0c;来方便进行数据的测量。 一、白底分大、中、小三个区域的网格 1、首先是HTML部分 <!DOCTYPE html> <html lang"en">…

SELINUX=enforcing时无法启动httpd服务的解决方案(semanage命令以及setroubleshoot-server插件的妙用)

一、问题描述&#xff1a; 当/etc/selinux/conf被要求必须是SELINUXenforcing&#xff0c;不被允许使用setenforce 0宽松模式 我们启动httpd就会报错&#xff1a; Job for httpd.service failed because the control process exited with error code. See "systemctl s…

tcp_tw_recycle慎用,记一次故障引发的教训(lesson)

tcp_tw_recycle 慎用 有一次线上问题&#xff0c;表现为有些设备有时能连上&#xff0c;有时又不行&#xff0c;某些设备又一直能连上。 后来经过长时间跟踪&#xff0c;发现是因为开启了tcp_tw_recycle&#xff0c;导致tcp握手异常。 tcp_tw_recycle 介绍 net.ipv4.tcp_tw_…

【PostgreSQL17新特性之-新增系统视图】

PostgreSQL-17-beta1版本目前已经发布了&#xff0c;每个版本随着功能的增加和一些相关优化&#xff0c;会对部分视图进行调整&#xff0c;以及增加新的视图。 postgres<17beta1>(ConnAs[postgres]:PID[21362] 2024-05-28/13:19:58)# select version(); ---------------…

探索标准差与方差的奥秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、标准差与方差的基础理解 代码案例 二、标准差与方差的计算方法 方差的计算 标准差的…

CTF实战分享 | RWZIP

前言 首先我们要了解&#xff0c;压缩包本身并不具备隐藏信息的功能&#xff0c;但由于在CTF竞赛中&#xff0c;经常出现压缩包与隐写术结合在一起的题目&#xff0c;所以我们需要掌握在CTF竞赛中有关 ZIP 压缩包题目的常见题型及分析手段。 读者福利 | CSDN大礼包&#xff1a…

2024-5-10——统计已测试设备

2024-5-10 题目来源我的题解方法一 模拟 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2960 我的题解 方法一 模拟 add记录前面已测试设备的数量&#xff0c;之后紧挨着的需要减add&#xff0c;若值大于0&#xff0c;则表示该设备可以被测试&#xff0c;add1;若值小于…