首页 > 解决方案 > 如何将 C# 中的嵌套字典结构复制到 Lua

问题描述

我试图在 Lua 中使用 Tables,并希望将我的一段代码从 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

标签: c#dictionaryluanestedlua-table

解决方案


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

当你这样做时:

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

您实际上是在删除 inFR和 in 中的所有其他条目ET,这是因为您在FR说时重新定义了值Dict[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

推荐阅读