C# 从传入JSON中删除元素时如何从字典中删除元素
我有一个服务器,它以这种JSON格式每隔一个刻度(10秒)向客户端(C#-Unity3D)发送JSON数据:C# 从传入JSON中删除元素时如何从字典中删除元素,c#,json,unity3d,C#,Json,Unity3d,我有一个服务器,它以这种JSON格式每隔一个刻度(10秒)向客户端(C#-Unity3D)发送JSON数据: { "bullets": { "123": { "x" : 1.23, "y": 23.4 }, "234": { same... } ... } 我所拥有的是,当这些项目符号不在字典中时,我将它们添加到字典中。当它们在字典中时,我只更新xy位置 我还需要一件我不知道怎么做的东西。我需要移除所有子弹,这些子弹已经没有了。这意味着,当在服务器上
{
"bullets": {
"123": {
"x" : 1.23,
"y": 23.4
},
"234": {
same...
}
...
}
我所拥有的是,当这些项目符号不在字典中时,我将它们添加到字典中。当它们在字典中时,我只更新xy位置
我还需要一件我不知道怎么做的东西。我需要移除所有子弹,这些子弹已经没有了。这意味着,当在服务器上删除项目符号时,服务器只需停止发送该项目符号的位置,客户端必须将其从字典中删除(当然也从场景中删除,但这不是问题)
所以,有一种方法可以在不使用服务器向客户机发送消息的情况下实现这一点,那个么子弹被移除了吗?我的意思是,这只是一个逻辑问题,但我真的不知道如何解决它。你解析你的JSON并将所有的项目符号添加到ArrayList中。 因此,您将有一个列表,您可以说“AllowedList”。然后,您将添加字典中的所有键值,并最终使用Enumerable删除AllowedList中不存在的键值
foreach (var key in MyDictionary.Keys.Except(AllowedList).ToList()){
MyDictionary.Remove(key);
}
ToList()
创建一个新的设置差异列表并防止异常。在此之后,您的字典将只包含服务器上的条目。您可以从字典键(listA)获得一个项目符号列表。然后迭代json以获取项目符号,在listA中检查它,如果它在那里,则将其移动到新的listB。如果不存在,则将其添加到新列表B。最后,您有一个包含死项目符号列表的listA,listB是来自服务器的活动项目符号列表。然后你可以重建你的字典,但我认为如果字典中的项目符号数是'n',JSON中的项目符号数是'm',我会得到O(n*m)。当我在10秒内完成这项工作时(计划是20秒),这是个坏主意,因为您只运行json字典。我就是不明白你为什么要储存它们。只需运行并更新。就这样。特别是如果移除的像你说的那样被自动处理,效果就像魅力一样!谢谢兄弟。说不出话来:没有Linq有什么简单的方法吗?因为我已经锁定了我的大脑,Linq很慢,在游戏中做得不好。