Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
如何在Lua中将数组转换为二维矩阵?_Lua - Fatal编程技术网

如何在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
中相应的每行和数字的数字。这真的很难看

  • 有没有更传统的方法将阵列转换为矩阵 卢阿
  • 是否有一个luarock包,人们经常使用它将数组转换为矩阵

  • 就我个人而言,我认为转换成一个字符串并抓取所有数字要比其他方法(大量除以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看看我的答案。我只给出了代码,以及它所做的简要说明。没那么难。虽然我不认为你应该停止贡献,但如果你开始给出答案而不是评论,可能会有所帮助。