【问题标题】:How to check 2DArray length on Lua?如何在 Lua 中检查 2D 数组长度?
【发布时间】:2017-06-26 16:03:14
【问题描述】:

我在将我的程序从 C# 移植到 Lua 时遇到问题,

有时,我需要检查二维数组的长度。在 C# 中,我使用的是这个:

testMap.GetLength(0)

testMap.GetLength(1)

用于检查其他尺寸长度。我找到了使用类似

的解决方案
#testmap

或类似的,但我根本无法让它工作。 以防万一,我正在使用这个数组:

`local testMap = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1 },
{ 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1 },
{ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
{ 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};`

【问题讨论】:

  • #testMap - 维度数和#testMap[1] 第一个数组的长度。
  • #testMap -2 #testMap[1] ?我不能让它这样工作
  • 那么你没有提供正确的 Lua 代码。可能是您使用了一些重新定义 len 运算符的自定义数组类。对于你的例子,我得到了#testMap = 22 和 `#testMap[1]=12`,正如预期的那样。
  • 我的错!我误解了你告诉我的内容。有用!这正是我所需要的,谢谢!

标签: multidimensional-array lua


【解决方案1】:

正如@moteus 所说,

#testMap

用于检查数组的一维和

#testMap[1]

为了另一个。

【讨论】:

  • 只要确保你知道 Lua 的长度操作符的限制! lua.org/manual/5.3/manual.html#3.4.7
  • 要记住的另一件事:t = { {1,2,3}, {4}, {5,6} } 将给出#t[1] --> 3#t[2] --> 1#t[3] --> 2。它不是一个固定大小(类似矩阵)的二维数组,它是一个数组数组,每个数组都可以有不同的长度(比如在 Java 中,在……中)。如果您(不小心)从某些子数组中添加/删除元素,您可能会得到奇怪的结果。 (如果你有一个奇怪的错误似乎没有意义并且以某种方式涉及数组长度,请记住这一点。你可能已经弄乱了数组的形状&然后暂时检查 所有子数组。)
【解决方案2】:

由于#testMap 没有给你想要的结果,我假设你想检索内部数组的项目总数。

您可以这样做:

local testMap = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 },
{ 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1 },
{ 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1 },
{ 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1 },
{ 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};

-- Either like this:
print(#testMap*#testMap[1])

-- Or like this:
local total = 0
for i=1, #testMap do
    total = total + #testMap[i]
end
print(total)

你可以在这里试试:https://repl.it/JBw1/0

【讨论】:

  • Forivin,感谢您的回答!但是moteus说的是我需要的。但是这段代码在项目的后期阶段对我也很有用,所以谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2020-03-26
相关资源
最近更新 更多