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

How to replicate a nested Dictionary structure in C# to Lua

我正在尝试使用 Lua 中的表,并想将我的一段代码从 C# 复制到它。其中我使用了一个嵌套的字典来完成这些事情,但我无法在 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 处的值20=]

当你这样做时也是如此:

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