【问题标题】:List in Hashtable losing all entries哈希表中的列表丢失所有条目
【发布时间】: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(这是次优的,但我不想对问题中的代码进行太多更改)

标签: c# list unity3d hashtable


【解决方案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 为我指明了正确的方向。

干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-01
    • 2012-08-30
    • 2023-03-18
    • 1970-01-01
    • 2023-03-31
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多