如何将 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} } }
你实际上是在删除 FR
和 ET
中的所有其他条目,这是因为当你说 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
我正在尝试使用 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} } }
你实际上是在删除 FR
和 ET
中的所有其他条目,这是因为当你说 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