繁体   English   中英

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

[英]Splitting string into 2 dimensional table in Lua

假设我有以下字符串:

map_data = "     *-*  ;    /|x|\ ;   *-*-*-*;  /|x|x|x|;-*-*-*-*-*;  \|x|x|x|;   *-*-*-*;    \|x|/ ;     *-*  ;"

我想在分号处将字符串拆分成有序表。 完成此操作后,我想获取表中的每个元素并将每个字符拆分为有序表(嵌套在第一个表中)。 这个想法是为一个ascii地图创建一个二维表。

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

map_data = "     *-*  ;    /|x|\ ;   *-*-*-*;  /|x|x|x|;-*-*-*-*-*;  \|x|x|x|;   *-*-*-*;    \|x|/ ;     *-*  ;"

map = {}

p = 1
pp = 1
for i in string.gmatch(map_data, "(.*);") do
    map[p] = {}
    for ii in string.gmatch(i, ".") do
        map[p][pp] = ii
        pp = pp + 1
    end
    p = p + 1
end

首先,字符串map_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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM