在 for 循环中从两个索引创建一个新索引

我在使用 lua 时循环遍历两个表格,并希望创建一个新的表格,并且其中没有空值。这基本上是一个叉乘。例如:

 {1,2,3} x {3,4,5} -> {1*3,1*4,1*5,2*3,2*4,2*5,3*3,3*4,3*5}

当然这并不难:

  t = {1,2,3}
  s = {3,4,5}
  xs = {}
  q = 1
  for i,h in ipairs(t) do
      for j,k in ipairs(s) do
          xs[q] = h * k
          q = q + 1
      end
  end

我们使用计数器 q 并在每次迭代中加 1。这很好用。但是是否也可以不使用计数器? 我是否可以仅仅使用 i 和 j 来填充 x,使得其中没有空缺?

  t = {1,2,3}
  s = {3,4,5}
  xs = {}

  for i,h in ipairs(t) do
      for j,k in ipairs(s) do
          q = f(i,j) -- <- 我想知道是否可以编写 f 函数
          xs[q] = h * k
      end
  end

我会说不行,至少我自己找不到一个简单的方法。

编辑:如果我允许使用 s 的大小,那么是可能的。

    s = {1,2,3}
    t = {4,5,6}
    xs = {}

    for i,h in ipairs(s) do
      for j,k in ipairs(t) do
         q = i + (j - 1) * #t
         xs[q] = h * k
      end
    end
点赞
用户7396148
用户7396148

你可以使用 table.insert,在你的情况下没有必要指定索引。

s = {1,2,3}
t = {4,5,6}
xs = {}

for i,h in ipairs(s) do
    for j,k in ipairs(t) do
       table.insert(xs, h * k)
    end
end
for _, v in ipairs(xs) do
    print(v)
end

关于 insert 的资源:

https://www.lua.org/pil/19.2.html

2020-04-23 21:01:46