c# - 如何将 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
解决方案
您的 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
推荐阅读
- ios - 调用 touchesEnded 后清除上下文
- mongodb - .NET 核心 MongoDB。按 guid 查找返回 null
- docker - 了解多阶段 Dockerfile 的工作流程
- c# - C# PUT Endpoint 接收带有 HMACAuthentication 的空参数
- mysql - 如何安装 MySQL 插件以使用 LDAP 身份验证?
- python - 使用python多线程写入同一文件但字节范围不同的安全性
- android - 模拟器在 Macbook pro M1 上停止响应
- flutter - Flutter - 在集成测试中持久化数据
- javascript - 如何在 mapbox-gl-geocoder 中设置搜索栏的自定义宽度?
- python - Open CV 在打开网络摄像头流时出现问题