1

我应该如何将对象列表从 C# 传递和迭代到 Lua?

我的示例带有一个数组int,当我使用自定义类时,我得到了相同的结果:

state_ = new Lua();
state_.LoadCLRPackage();

var candidates = new int[] { 0, 1, 2, 3, 4, 5 };

state_["Candidates"] = candidates;

state_.DoString(script);

var b = state_["Candidates"] as int[];

return toRetrun;

脚本在哪里

-- Iterate each candidate
for k,v in ipairs(Candidates) do

    print(k, Candidates[k])

end

输出是:

1   1
2   2
3   3
4   4
5   5

它跳过了第一个,我得到了异常:“索引超出了数组的范围。” 我的代码有什么问题?

4

2 回答 2

1

在 Lua 中,索引通常从索引 1 开始。来自docs

Lua 习惯以索引 1 开始数组

尝试这样的事情:

for i = 0, #Candidates do
     print(i, Candidates[i])
end

因为我知道ipairs()只支持 1 个索引,所以你必须定义自己的函数或者只使用常规的 for 代替。

我不确定但也试试

for k,v in ipairs(Candidates), Candidates, -1 do
  print(k, Candidates[k])
end
于 2019-05-21T20:54:20.633 回答
0

C# 列表具有 Count 属性。它可以用作迭代的上限:

[...]
var candidates = new List<int> { 0, 1, 2, 3, 4, 5 };
[...]

[...]
-- Iterate each candidate
for candidateCount = 0, Candidates.Count - 1 do
[...]
于 2019-05-21T21:15:05.537 回答