Lua разбивает строки на ключи и значения таблицы
Поэтому я хочу разделить две строки и получить таблицу, в которой одна строка будет равна ключам, а другая-значениям.
Итак, если:
String1 = "Key1,Key2,Key3,Key4,Key Ect..."
String2 = "Value1,Value2,Value3,Value4,Value Ect..."
Выводом будет таблица в виде folows:
Key1 - Value1
Key2 - Value2
Key3 - Value3
Key4 - Value4
Key Ect... - Value Ect...
Я смотрел на эту функцию разделения, которую я нашел на Lua wiki
split(String2, ",")
function split(String, pat)
local t = {} -- NOTE: use {n = 0} in Lua-5.0
local fpat = "(.-)" .. pat
local last_end = 1
local s, e, cap = str:find(fpat, 1)
while s do
if s ~= 1 or cap ~= "" then
table.insert(t,cap)
end
last_end = e+1
s, e, cap = str:find(fpat, last_end)
end
if last_end <= #str then
cap = str:sub(last_end)
table.insert(t, cap)
end
return t
end
Но, конечно, это только возвращает:
1 - Value1
2 - Value2
И так далее...
Я собираюсь начать пытаться модифицировать этот код, но я не знаю, как далеко я продвинусь.2 ответа:
Вы можете использовать его непосредственно так:
local t1 = split(String1, ",") local t2 = split(String2, ",") local result = {} for k, v in ipairs(t1) do result[v] = t2[k] end
Или создайте свой собственный итератор:
local function my_iter(t1, t2) local i = 0 return function() i = i + 1; return t1[i], t2[i] end end local result = {} for v1, v2 in my_iter(t1, t2) do result[v1] = v2 end
Приведенный ниже код позволяет избежать создания двух временных таблиц:
function join(s1,s2) local b1,e1,k=1 local b2,e2,v=1 local t={} while true do b1,e1,k=s1:find("([^,]+)",b1) if b1==nil then break end b1=e1+1 b2,e2,v=s2:find("([^,]+)",b2) if b2==nil then break end b2=e2+1 t[k]=v end return t end String1 = "Key1,Key2,Key3,Key4" String2 = "Value1,Value2,Value3,Value4" for k,v in pairs(join(String1,String2)) do print(k,v) end