【发布时间】:2014-06-09 08:50:09
【问题描述】:
我目前正在尝试为 AI 实施感官系统,但偶然发现了一个我自己似乎无法解决的问题。
我的系统有一个哈希表,其中包含其传感器找到的所有信息。每一帧它都会像这样更新它的每个传感器,变量“info”是哈希表:
for(int i = 0; i < sensors.Length; i++)
{
sensors[i].Update(info);
}
每个传感器都会在表格中添加一个列表:
public void Update(Hashtable _Info)
{
List<Transform> detected = new List<Transform>();
// Run detection code
_Info.Add(key, detected);
}
正在使用的密钥在传感器的类中声明。当我尝试对两个传感器使用相同的键时,问题就出现了。如果表包含这样的键,我尝试通过检查传感器的更新方法来解决这个问题:
public void Update(Hashtable _Info)
{
List<Transform> detected = new List<Transform>();
if(_Info.ContainsKey(key))
detected = (List<Transform>)_Info[key];
// Run detection code
if(!_Info.ContainsKey(key))
_Info.Add(key, detected);
else
_Info[key] = detected;
}
我以为这会解决我的问题,但事实并非如此。第一个传感器正在正确地将其检测到的转换列表添加到表中。我通过在每个单独的传感器更新后检查表格来确保。然而,第二个传感器无法正确地从表中检索列表并且正在使用一个空的,这使我丢失了第一个传感器的数据。看起来第二个传感器接收到的表确实包含正确的密钥,但列表是空的。我在调用第二个传感器的 Update 方法之前检查了该表,它仍然包含带有第一个传感器条目的列表,但似乎在 Update 方法中丢失了它。
谁能告诉我这里发生了什么以及如何解决这个问题?我需要哈希表来保存所有条目,而不仅仅是它更新的最后一个传感器的条目。
编辑: 密钥始终是字符串,抱歉没有提及。
【问题讨论】:
-
key的类型是什么? -
这里的
key是什么?这很重要 -
密钥始终是一个字符串,也编辑了帖子。
-
你是否碰巧跨多个线程运行这个?
-
你能展示一个简短但完整的例子来说明它不起作用吗?例如,这是基于问题中的代码,并且有效:pastie.org/9272910(这是次优的,但我不想对问题中的代码进行太多更改)