如何将C#中的嵌套Dictionary结构复制到Lua



我试图在Lua中使用Tables,并想将我的一段代码从C#复制到它。在那里,我使用了一个嵌套的Dictionary来完成任务,但在Lua无法实现这一点。

这是我试图复制的C#代码

public class FBDetails
{
public double ElapsedTime { get; set; }
public double AFB{ get; set; }
}

public void AddFBDetails(Dictionary<double, Dictionary<DateTime, List<FBDetails>>> Dict, double FR, DateTime ET, double ElapsedTime, double FB)
{
if (!Dict.ContainsKey(FR))
{
Dict.Add(FR, new Dictionary<DateTime, List<FBDetails>>());
}
if (!Dict[FR].ContainsKey(ET))
{   
Dict[FR].Add(ET, new List<FBDetails>());
Dict[FR][ET].Add(new FBDetails() {ElapsedTime = ElapsedTime, ActiveFB = FB});
}
else
{
Dict[FR][ET].Add(new FBDetails() {ElapsedTime = ElapsedTime, ActiveFB = FB});
}
}

到目前为止,我写的Lua代码(我知道这是错误的(如下。PS:到目前为止,我还不太习惯Lua中的函数,所以我只是专注于正确的数据结构,但如果有人能帮助我实现函数,我将不胜感激。


Dict = {} 
if Dict[FR] == nil then
Dict { [FR] = {} }
end
if Dict[FR][ET] == nil then
Dict[FR] = { [ET] = {} }
Dict[FR] = { [ET] = { {ElapsedTime}, {FB} } } 
else
Dict[FR] = { [ET] = { {ElapsedTime}, {FB} } } 
end

您的lua代码正在清除以前的条目,这是因为您没有正确设置值。

当你这样做:

Dict[FR] = { [ET] = { {ElapsedTime}, {FB} } } 

您实际上是在删除FRET中的所有其他条目,这是因为当您说Dict[FR] = {...时,您正在重新定义FR处的值

当你这样做时也是如此:

Dict = { [FR] = {} }

您正在重新定义Dict,删除除当前FR之外的所有其他条目


您的lua应该对=之前的值进行索引。它也可以被简化。

function AddFBDetails(Dict, FR, ET, ElapsedTime, FB)
if Dict[FR] == nil then
Dict[FR] = {[ET] = {}}
elseif Dict[FR][ET] == nil then
Dict[FR][ET] = {}
end
table.insert(Dict[FR][ET], { {ElapsedTime}, {FB} })
end

最新更新