在Lua中,我有一个这样的字符串:231 523 402 1223 9043 -1 4
,其中包含多个以空格分隔的数字。现在我想将它转换为int数字的向量,如何使用一些内置函数来实现它?
答案 0 :(得分:4)
您可以将string.gsub与函数一起用作替换值。
如果repl是一个函数,那么每次匹配发生时都会调用此函数,并按顺序将所有捕获的子字符串作为参数传递。
使用示例如下:
Error: $parse:isecdom
Referencing a DOM node in Expression
直接使用它:
local function tovector(s)
local t = {}
s:gsub('%-?%d+', function(n) t[#t+1] = tonumber(n) end)
return t
end
结果是一个载体(或Lua术语中的序列):
local t = tovector '231 523 402 1223 9043 -1 4'
答案 1 :(得分:1)
使用tonumber
将字符串转换为数字。
使用字符串模式从字符串中获取数字
http://www.lua.org/manual/5.3/manual.html#pdf-string.gmatch
local example = "123 321 -2"
for strNumber in string.gmatch(example, "%d+") do
tonumber(strNumber)
end
"%d+"
将匹配由一个或多个结果数字组成的任何字符串segmet。
由于这不是一个免费的编码服务,我留给你处理找到减号:)只需阅读参考。它非常简单。
获得数字后,可以将它们插入Lua表中。 http://www.lua.org/manual/5.3/manual.html#pdf-table.insert
答案 2 :(得分:0)
您可以将列表转换为此代码
return {231,523,402,1223,9043,-1,4}
让Lua努力工作:
s="231 523 402 1223 9043 -1 4"
t=loadstring("return {"..s:gsub("%s+",",").."}")()
for k,v in ipairs(t) do print(k,v) end