Lua: 以不区分大小写的方式合并两个字符串集合
2016-10-19 19:31:10
收藏:0
阅读:144
评论:3
我希望以不区分大小写的方式合并两个字符串集合:
string_collection1 = {"hello","buddy","world","ciao"}
string_collection2 = {"Hello","Buddy","holly","Bye", "bYe"}
merged_string_collection = merge_case_insensitive(string_collection1,string_collection2) --> {"hello","buddy","world","holly","bye","ciao"}
以下是一个尝试,但它无法正常工作...
function merge_case_insensitive(t1,t2)
t3 = {}
for _,s1 in pairs(t1) do
for _,s2 in pairs(t2) do
if string.lower(s1) == string.lower(s2) then
t3[s1] = s1
end
end
end
t4 = {}
i = 1
for s,_ in pairs(t3) do
t4[i] = string.lower(s)
i = i + 1
end
return t4
end
string_collection1 = {"hello","buddy","world","ciao"}
string_collection2 = {"Hello","Buddy","holly","Bye", "bYe"}
merged_string_collection = merge_case_insensitive(string_collection1,string_collection2)
for k,v in pairs(merged_string_collection) do print(k,v) end
点赞
用户3735873
为了得到一个表格,其中包含出现一次的两个其他表格中的所有字符串(不区分大小写),你需要像这样:
function merge_case_insensitive(t1,t2)
local ans = {}
for _,v in pairs(t1) do ans[v:lower()] = true end
for _,v in pairs(t2) do ans[v:lower()] = true end
return ans
end
string_collection1 = {"hello","buddy","world","ciao"}
string_collection2 = {"Hello","Buddy","holly","Bye", "bYe"}
merged_string_collection = merge_case_insensitive(string_collection1,string_collection2)
for k in pairs(merged_string_collection) do print(k) end
编辑:如果你想要一个数组结果(不添加另一个迭代)
function merge_case_insensitive(t1,t2)
local ans = {}
local
function add(t)
for _,v in pairs(t) do
v = v:lower()
if ans[v] == nil then ans[#ans+1] = v end
ans[v] = true
end
end
add(t1)
add(t2)
return ans
end
string_collection1 = {"hello","buddy","world","ciao"}
string_collection2 = {"Hello","Buddy","holly","Bye", "bYe"}
merged_string_collection = merge_case_insensitive(string_collection1,string_collection2)
for _,v in ipairs(merged_string_collection) do print(v) end
2016-10-19 21:46:09
用户3979429
我们可以通过简单地迭代两个表来完成此操作,并存储一个临时字典以检查我们已经找到了什么单词,如果尚未找到,则将它们放入我们的新数组中:
function Merge(t1, t2)
local found = {} -- 临时字典
local new = {} -- 新数组
local low -- 用于以后存储单词的低版本值
for i,v in ipairs(t1) do -- 开始迭代第一个表
low = v:lower()
if not found[low] then -- 如果没有找到
new[#new+1] = low -- 将其放入新表中
found[low] = true -- 添加到找到的
end
end
for i,v in ipairs(t2) do -- 重复第二个表
low = v:lower()
if not found[low] then
new[#new+1] = low
found[low] = true
end
end
return new -- 返回新数组
end
这种方法消除了像Piglet的答案中需要第三次迭代的需要,并且不会像tonypdmtr的答案中一样不停地重新定义函数和闭包并调用它们。
2016-10-20 02:40:19
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

它不能工作,因为您使用
==来比较两个字符串,其中进行了区分大小写。您可以做一些像
string.lower(s1) == string.lower(s2)这样的事情来解决这个问题。编辑:
由于您不能自行找到剩余部分,因此提供一些代码:
local t1 = {"hello","buddy","world","ciao"} local t2 = {"Hello","Buddy","holly","Bye", "bYe"} local aux_table = {} local merged_table = {} for k,v in pairs(t1) do aux_table[v:lower()] = true end for k,v in pairs(t2) do aux_table[v:lower()] = true end for k,v in pairs(aux_table) do table.insert(merged_table, k) end现在,
merged_table包含输入表中每个单词的小写版本。现在请将其倒入可以接受任意数量的输入表格的函数中,您就完成了。
我们在此执行的操作:我们使用这些表中每个单词的小写版本并将它们存储在列表中。
aux_table[string.lower("Hello")]将索引与aux_table[string.lower("hello")]相同的值。因此,即使单词以多个变体出现,我们也会得到一个条目。使用键可避免我们比较字符串并区分唯一单词和其他单词。