如何在C#和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
点赞
用户7396148
用户7396148

您的 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
2020-08-26 13:51:13