Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在Lua中将字符串拆分为二维表_String_Split_Lua_Lua Patterns - Fatal编程技术网

String 在Lua中将字符串拆分为二维表

String 在Lua中将字符串拆分为二维表,string,split,lua,lua-patterns,String,Split,Lua,Lua Patterns,假设我有这个字符串: map_data = " *-* ; /|x|\ ; *-*-*-*; /|x|x|x|;-*-*-*-*-*; \|x|x|x|; *-*-*-*; \|x|/ ; *-* ;" 我想将字符串拆分成一个分号处的有序表。完成后,我希望获取表中的每个元素,并将每个字符拆分为一个有序表(嵌套在第一个表中)。其思想是为ascii映射创建一个二维表 我已经尝试过这个方法(但它不起作用,我也怀疑有更简单的方法): 首先,字符串map\u

假设我有这个字符串:

map_data = "     *-*  ;    /|x|\ ;   *-*-*-*;  /|x|x|x|;-*-*-*-*-*;  \|x|x|x|;   *-*-*-*;    \|x|/ ;     *-*  ;"
我想将字符串拆分成一个分号处的有序表。完成后,我希望获取表中的每个元素,并将每个字符拆分为一个有序表(嵌套在第一个表中)。其思想是为ascii映射创建一个二维表

我已经尝试过这个方法(但它不起作用,我也怀疑有更简单的方法):


首先,字符串
map\u data
无效,因为
\
需要转义。或者可以使用长字符串语法
[…]]

map_data = [[     *-*  ;    /|x|\ ;   *-*-*-*;  /|x|x|x|;-*-*-*-*-*;  \|x|x|x|;   *-*-*-*;    \|x|/ ;     *-*  ;]]
模式
(*)的问题是,修饰符
*
是贪婪的。相反,使用惰性的
-
修饰符:

for i in string.gmatch(map_data, "(.-);") do

我已经有好几年没有接触Lua了,但是假设你解决了逃跑角色的问题,你就不能按照

map = {{}} -- map initially contains one empty line 
for i = 1, #map_data do
    local c = map_data:sub(i,i)
    if c == ';' then
        map[#map+1] = {} -- add another line to the end of map
    else
        map[#map][ #map[#map] + 1] = c -- add c to last line in map
    end
end

所以我做了一些更改,出于某种原因,它只捕获了第一行:“-”。还有什么我做错了吗?@EliBell-
pp=1
应该移到外部循环中。不要像那样修改原始代码,这会使当前答案无效。不过还有一个简单的问题。假设我想将字符存储在表中,比如:map[y][x].value,而不是直接存储到map[y][x]中。我需要如何更改代码以避免出现nil值错误?
map = {{}} -- map initially contains one empty line 
for i = 1, #map_data do
    local c = map_data:sub(i,i)
    if c == ';' then
        map[#map+1] = {} -- add another line to the end of map
    else
        map[#map][ #map[#map] + 1] = c -- add c to last line in map
    end
end