问题描述
我试图在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
解决方法
您的lua代码正在清除以前的条目,这是因为您没有正确设置该值。
操作时:
Dict[FR] = { [ET] = { {ElapsedTime},{FB} } }
实际上,您正在删除FR
和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