我应该如何将对象列表从 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
它跳过第一个,我得到异常:“索引超出了数组的范围。” 我的代码有什么问题吗?
在Lua中,索引一般从索引1开始。来自docs
Lua 中习惯以索引 1 开始数组
尝试这样的事情:
for i = 0, #Candidates do
print(i, Candidates[i])
end
据我所知
ipairs()
仅支持 1 个索引,因此您必须定义自己的函数或仅使用常规函数。
我不确定但也尝试一下
for k,v in ipairs(Candidates), Candidates, -1 do
print(k, Candidates[k])
end
C# 列表具有 Count 属性。它可以用作迭代的上限:
[...]
var candidates = new List<int> { 0, 1, 2, 3, 4, 5 };
[...]
[...]
-- Iterate each candidate
for candidateCount = 0, Candidates.Count - 1 do
[...]
要在 NLua 中迭代 C# 中的对象列表,您可以简单地执行以下操作:
for candidate in luanet.each(Candidates) do
print(candidate)
end