如何在Lua中将数组转换为二维矩阵?
我有下面的数字数组如何在Lua中将数组转换为二维矩阵?,lua,Lua,我有下面的数字数组 arr = {3412323450, 8912745671, 3212367894} 我想把它转换成一个简单的二维矩阵 mat = { {3, 4, 1, 2, 3, 2, 3, 4, 5, 0}, {8, 9, 1, 2, 7, 4, 5, 6, 7, 1}, {3, 2, 1, 2, 3, 6, 7, 8, 9, 4} } 最初,我会迭代arr,将其转换为字符串,然后拆分字符串,迭代每个字符串字符,并将其转换回存储
arr = {3412323450, 8912745671, 3212367894}
我想把它转换成一个简单的二维矩阵
mat = {
{3, 4, 1, 2, 3, 2, 3, 4, 5, 0},
{8, 9, 1, 2, 7, 4, 5, 6, 7, 1},
{3, 2, 1, 2, 3, 6, 7, 8, 9, 4}
}
最初,我会迭代arr
,将其转换为字符串,然后拆分字符串,迭代每个字符串字符,并将其转换回存储mat
中相应的每行和数字的数字。这真的很难看
就我个人而言,我认为转换成一个字符串并抓取所有数字要比其他方法(大量除以10,或者你能想到的任何其他复杂方法)漂亮得多。如果将操作封装在函数中,那么转换就不会经常出现在代码中,这一点尤其正确
function Digits(n)
local digits = {}
for d in tostring(n):gmatch('%d') do
digits[#digits+1] = tonumber(d)
end
return digits
end
function ArrayToMatrix(array)
local matrix = {}
for i,v in ipairs(array) do
matrix[i] = Digits(v)
end
return matrix
end
就我个人而言,我认为转换成一个字符串并抓取所有数字要比其他方法(大量除以10,或者你能想到的任何其他复杂方法)漂亮得多。如果将操作封装在函数中,那么转换就不会经常出现在代码中,这一点尤其正确
function Digits(n)
local digits = {}
for d in tostring(n):gmatch('%d') do
digits[#digits+1] = tonumber(d)
end
return digits
end
function ArrayToMatrix(array)
local matrix = {}
for i,v in ipairs(array) do
matrix[i] = Digits(v)
end
return matrix
end
好的,这是我的尝试
arr = {3412323450, 8912745671, 3212367894}
function arr2matrix(arr)
local mat = {}
for i, row in ipairs(arr) do
mat[i] = {}
local j = 0
row_str = string.gsub(row, '%d', '%0 ')
for c in string.gmatch(row_str, '%S') do
j = j + 1
mat[i][j] = tonumber(c)
end
end
return mat
end
-- checking the result
m = arr2matrix(arr)
for i=1, #m do
for j=1, #m[i] do
io.write(m[i][j]..',')
end
io.write('\n')
end
运行上述命令可以得到:
3,4,1,2,3,2,3,4,5,0,
8,9,1,2,7,4,5,6,7,1,
3,2,1,2,3,6,7,8,9,4,
好的,这是我的尝试
arr = {3412323450, 8912745671, 3212367894}
function arr2matrix(arr)
local mat = {}
for i, row in ipairs(arr) do
mat[i] = {}
local j = 0
row_str = string.gsub(row, '%d', '%0 ')
for c in string.gmatch(row_str, '%S') do
j = j + 1
mat[i][j] = tonumber(c)
end
end
return mat
end
-- checking the result
m = arr2matrix(arr)
for i=1, #m do
for j=1, #m[i] do
io.write(m[i][j]..',')
end
io.write('\n')
end
运行上述命令可以得到:
3,4,1,2,3,2,3,4,5,0,
8,9,1,2,7,4,5,6,7,1,
3,2,1,2,3,6,7,8,9,4,
转换为字符串->拆分->转换回字符串的方式对我来说并不难看。
mat={};对于ipairs(arr)中的i,n do mat[i]=load('return{'..string.gsub(n,'%d','%0')…}'))()end
我的注释并不假装是正确的答案。这只是一个快速而肮脏的解决方案。尝试arr={123456789',os.执行“rm something”}
看看会发生什么。@Egor是的,但是如果你的评论确实解决了手头的问题,低质量的答案总比没有好。正如Nicol所指出的,由于这个原因,未答复的列表是无用的。也许个人的指导方针是“好的,如果3天内没有人回答,我会发布我的答案”。把它留在评论里没有多大帮助。@Egor看看我的答案。我只给出了代码,以及它所做的简要说明。没那么难。虽然我不认为你应该停止贡献,但如果你开始给出答案而不是评论,可能会有所帮助。转换为字符串->拆分->转换回字符串的方式对我来说并不难看。mat={};对于ipairs(arr)中的i,n do mat[i]=load('return{'..string.gsub(n,'%d','%0')…}'))()end
我的注释并不假装是正确的答案。这只是一个快速而肮脏的解决方案。尝试arr={123456789',os.执行“rm something”}
看看会发生什么。@Egor是的,但是如果你的评论确实解决了手头的问题,低质量的答案总比没有好。正如Nicol所指出的,由于这个原因,未答复的列表是无用的。也许个人的指导方针是“好的,如果3天内没有人回答,我会发布我的答案”。把它留在评论里没有多大帮助。@Egor看看我的答案。我只给出了代码,以及它所做的简要说明。没那么难。虽然我不认为你应该停止贡献,但如果你开始给出答案而不是评论,可能会有所帮助。