我目前正在尝试为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);
}
正在使用的密钥在传感器的类中声明。当我尝试对两个传感器使用相同的键时,问题出现了。我尝试通过检查传感器的Update方法来解决这个问题,如果表中包含这样的键:
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方法中丢失了它。
有人可以告诉我这里发生了什么以及如何解决这个问题?我需要哈希表来保存所有条目,而不仅仅是它更新的最后一个传感器。
编辑: 钥匙总是一根绳子,抱歉没有提到。
答案 0 :(得分:1)
感谢Mark Gravell,我能够找到并解决问题:
我为Mark Gravell编写的代码,以进一步解释http://pastie.org/9272949中的问题,表明我已经清除了每个传感器的detected
列表。似乎清除了列表中添加到哈希表的第一个传感器。我改变了这一部分如下:
if(_Info.ContainsKey(Key))
detected = (List<Transform>)_Info[Key];
else
detected = new List<Transform>();
这完全解决了这个问题。感谢大家如此迅速地回应,感谢Mark Gravell指出了我正确的方向。
干杯!