Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >编程小知识之 Lua split 函数

编程小知识之 Lua split 函数

作者头像
用户2615200
发布于 2019-06-14 12:45:12
发布于 2019-06-14 12:45:12
3.5K00
代码可运行
举报
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1446297

本文简单介绍了如何在 Lua 中实现 split 函数

Lua 的标准库并没有提供字符串的 split 函数,不过自己实现一下也并不困难,网上其实也早有了很多实现版本:

之前有童鞋使用 Lua 实现了自己的 split 版本还与 JS(基于V8) 中的标准实现进行了性能比较,有兴趣的朋友可以看看,过程其实挺有趣的,只是成文较早,文章中涉及的代码部分已经有了不少变化,阅读的时候注意一下即可(文章在这里)

lua-users.org 上甚至有篇专门的 wiki 讨论了这个话题,在这里.

各个实现的基本功能都是类似的,但是对于一些边界情况的处理则不尽相同,参考 JS 中对于 split 函数的规范定义,我也尝试实现了一下自己的 split 函数版本,有兴趣的朋友可以参考一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function string:split_lite(sep)
    local splits = {}
    
    if sep == nil then
        -- return table with whole str
        table.insert(splits, self)
    elseif sep == "" then
        -- return table with each single character
        local len = #self
        for i = 1, len do
            table.insert(splits, self:sub(i, i))
        end
    else
        -- normal split use gmatch
        local pattern = "[^" .. sep .. "]+"
        for str in string.gmatch(self, pattern) do
            table.insert(splits, str)
        end
    end
    
    return splits
end

-- usage
local str = "a,,b"
string.split_lite(str, ",")
string.split_lite(str, ";")
string.split_lite(str)
string.split_lite(str, "")
str:split_lite("")

其实比起实现,我更好奇的是为什么 Lua 不将 split 函数加入到标准库中,毕竟标准库中已经有了 table.concat 函数(可以认为是 split 的反函数).

简单搜索了一下相关的 Lua mailing list,发现了一个相关回答,引用如下:

“Because it is quite easy to write a join in C, and it is much more efficient than its equivalent in Lua. A split in C is more difficult (among other things because of its endless variations), and would offer no significant performance gain over its equivalent in Lua.” – Roberto

大意是说使用 C 来实现(等同于加入标准库?) split 并不会有很大的性能提升,所以就不实现了.

不过个人觉得应该还有更多的细节考量,所以在 Lua mailing list 中又询问了一下,等有了更多答复我再来更新一下这篇博文~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年06月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Ansible自动化运维学习笔记2
前言:在ansible中使用变量,能让我们的工作变得更加灵活,在ansible中变量的使用方式有很多种
全栈工程师修炼指南
2020/10/26
3.1K0
Ansible自动化运维学习笔记2
[Ansible专栏]Ansible条件判断的介绍和使用
很多时候,某些场景下playbook的结果依赖于变量、fact或者是前一个任务的执行结果,或者有的时候,我们会基于上一个task执行返回的结果而决定如何执行后续的task。这个时候就需要用到条件判断。
没有故事的陈师傅
2022/12/06
1.6K0
Ansible自动化运维学习笔记3
在使用ansible的过程中,我们经常需要处理一些返回信息而这些返回信息中,通常可能不是单独的一条返回信息而是一个信息列表;
全栈工程师修炼指南
2020/10/26
2.6K0
Ansible自动化运维学习笔记3
运维必备 | ansible 自动化运维工具之变量的定义与调用
前言:在编写ansible脚本中往往会使用变量,它能让我们的工作变得更加灵活,但是在ansible中变量的使用方式有很多种,下面跟着【WeiyiGeek】作者通过一个个简单示例来进行一一讲解,赶快来一起来学习吧。
全栈工程师修炼指南
2023/10/31
1.8K0
运维必备 | ansible 自动化运维工具之变量的定义与调用
Ansible自动化运维学习笔记1
基础概念 什么是ansible? 答:它是一个”配置管理工具”,它是一个Linux系统上的”自动化运维工具”;
全栈工程师修炼指南
2020/10/26
4.2K0
Ansible自动化运维学习笔记1
Ansible自动化运维学习笔记5
描述:”过滤器(filters)”可以帮助我们对数据进行处理,ansible中的过滤器功能来自于jinja2模板引擎,我们可以借助jinja2的过滤器功能在ansible中对数据进行各种处理;很多其他的过滤器有些是jinja2内置的有些是ansible特有,变量和过滤器之间采用类似于管道符进行拼接;
全栈工程师修炼指南
2020/10/23
3.4K0
Ansible自动化运维学习笔记1
基础概念 什么是ansible? 答:它是一个Linux系统上的”自动化运维工具”,类似一个”配置管理工具”;
全栈工程师修炼指南
2022/09/28
2K0
Ansible自动化运维学习笔记1
Ansible自动化运维工具
Ansible 是一个极其简单的 IT 自动化平台,可让您的应用程序和系统更易于部署和维护。从代码部署到网络配置再到云管理,使用一种接近简单英语的语言,使用 SSH 实现一切自动化,无需在远程系统上安装代理。
BoyChai
2022/06/22
2.7K0
Ansible自动化运维工具
自动化运维实践 | Ansible变量
2)用户无须自定义。Ansible会在执行playbook之前去远程主机上搜集关于远程节点系统信息的变量。
小土豆Yuki
2020/08/17
2.1K0
自动化运维实践 | Ansible变量
Ansible自动化运维配置与应用(结合实例)
注: command模块和shell模块的区别是:shell模块支持“管道符”及脚本。
阿dai学长
2019/04/03
2.9K0
自动化运维利器Ansible要点汇总
  由于大部分互联网公司服务器环境复杂,线上线下环境、测试正式环境、分区环境、客户项目环境等造成每个应用都要重新部署,而且服务器数量少则几十台,多则千台,若手工一台台部署效率低下,且容易出错,不利后期运维,因此需要Ansible或者Saltstack来解决此问题。
欢醉
2021/10/26
2.2K0
Ansible概要
检验清单是否正确。-i用于指定清单文件,all和master是被管理节点的模式(pattern)。
宅蓝三木
2024/10/09
4270
Ansible概要
Ansible playbook 编程
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
踏歌行
2020/10/15
1.9K0
Ansible playbook 编程
Ansible PlayBook语法
playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过Ansible中的tasks定义好的角色(play的内容被称为tasks,即任务),从根本上来讲所谓tasks无非是调用Ansible的一个module,将多个play组织在一个playbook中即可以让它们联同起来按事先编排的机制一同工作.
王 瑞
2022/12/28
2.5K0
ansible 变量
和大多数编程语言一样,ansible变量名应该由字符、数字、下划线组成,变量名需要以字母开头,ansible内置的关键字不能作为变量名。
张琳兮
2019/03/14
2.3K0
ansible-语法
上述使用vars定义一个变量testvar1 并使用{{ testvar1 }}来引用
丁D
2022/08/12
5940
ansible-语法
自动化运维工具Ansible之Tests测验详解
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
踏歌行
2020/10/15
7130
自动化运维工具Ansible之Tests测验详解
自动化运维利器 ansible-入门
ansible 是一款强大的配置管理工具,诣在帮助系统管理员高效率地管理成百上千台主机。设想一个主机是一个士兵,那么有了 ansible ,作为系统管理员的你就是一个将领,你可以通过口头命令,即一次下发一条命令(ansible ad-hoc 模式)方式让一个或一组或全部的士兵按你的指令行事,也可以将多条命令写在纸上(ansible playbook 模式), 需要执行命令时只需要提供这张纸即可。你可以让多个士兵同时做相同或不同的事情,可以方便的让新加入的士兵快速加入已有的兵种队伍,也以快速改变兵种(配置管理),一句话,士兵都严格听你的,你做好命令的设计,ansible 自动帮你发布和执行。
somenzz
2020/12/10
1.7K0
《Ansible自动化运维:技术与最佳实践》第三章读书笔记
本章主要通过对 Ansible 经常使用的组件进行讲解,使对 Ansible 有一个更全面的了解,主要包含以下内容:
武培轩
2019/09/24
1.2K0
第五章·自动化运维工具-Ansible流程控制
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
7010
第五章·自动化运维工具-Ansible流程控制
相关推荐
Ansible自动化运维学习笔记2
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验