在Hashtable中列出丢失所有条目

时间:2014-06-09 08:50:09

标签: c# list unity3d hashtable

我目前正在尝试为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方法中丢失了它。

有人可以告诉我这里发生了什么以及如何解决这个问题?我需要哈希表来保存所有条目,而不仅仅是它更新的最后一个传感器。

编辑: 钥匙总是一根绳子,抱歉没有提到。

1 个答案:

答案 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指出了我正确的方向。

干杯!