【问题标题】:Update key value dictionary list?更新键值字典列表?
【发布时间】:2018-04-19 04:55:20
【问题描述】:

好的,可以使用普通字典执行此操作,但是我的字典/要存储的内容的大小不断变化,所以我想使用一个列表。这是我存储的内容:

public List<KeyValuePair<GameObject, float>> planesFilled;

我必须不断更新这些值(如果它们产生并且不存在于我的更新函数的列表中,则添加对。我正在存储对象与场景中另一个对象之间的距离。

我遇到了与无法调用Contains 相关的错误——我不一定知道过去的值。我的钥匙应该是游戏对象。

到目前为止我所拥有的:

foreach(GameObject plane in anchorManager.planesSpawned)
        {
            if (ContainsKeyValue(planesFilled.ToDictionary(), plane)) { //dont know value
            } else {
                planesFilled.Add (new KeyValuePair<GameObject, float>(plane, GetDistanceBetweenObjs(plane.transform, botController.transform)));
            }
            //planesFilled[plane] = new KeyValuePair<GameObject, float>(plane, GetDistanceBetweenObjs(plane.transform, botController.transform));

            //list.Add(new KeyValuePair<double,double>(p.Key,p.Value));
            planesFilled.Sort((pair1,pair2) => pair1.Value.CompareTo(pair2.Value));
        }

此函数已启动,但在我的场景中并不完全有效:

public bool ContainsKeyValue<TKey, TVal>(Dictionary<TKey, TVal> dictionnaire,
        TKey expectedKey,
        TVal expectedValue) where TVal : IComparable
    {
        TVal actualValue;

        if (!dictionnaire.TryGetValue(expectedKey, out actualValue))
        {
            return false;
        }
        return actualValue.CompareTo(expectedValue) == 0;
    }

如何更新现有对象的值或将新对象添加到我的列表字典情况?

【问题讨论】:

  • 听起来你应该只使用Dictionary。字典可以随时间改变大小。这些函数正在尝试创建已经作为 Dictionary 的一部分存在的函数,并且在循环中调用 ToDictionary 函数会真正影响您的性能。
  • 您能否详细说明“但是我的字典/要存储的东西的大小在不断变化,所以我想使用一个列表”?可以在字典中添加和删除条目。
  • 另外,你在一个循环中有planesFilled.ToDictionary(),这听起来像是在创建一个新字典来检查是否存在一个键。这强烈表明您应该只使用某种字典 - 正如 James 所说,很可能是 SortedDictionary(或 SortedList,它实际上是一个排序字典,只是根据其实现命名)。跨度>
  • Skyguy 如果要获取值,请使用TryGetValue(key, out value)(因为您已经是),如果您只想检查密钥是否存在,请使用ContainsKey(key)
  • @john 说了什么。您可能在Dictionary 上找到的其他有用的成员是Values,它只返回一个值序列,Keys 它只返回一个键序列,以及ContainsValue(value),它可以让你检查一个值是否存在。请参阅msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx 了解完整的成员列表。

标签: c# list sorting dictionary unity3d


【解决方案1】:

如何更新现有对象的值或将新对象添加到我的 列出字典情况?

我无法回答您的“列表字典”;而且我不确定是什么让您对使用实际的Dictionary 犹豫不决。但如果你这样做了,你可以这样做:

yourDictionary["yourKey"] = yourData;

这将add or upate 一个字典对。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-15
    • 2019-02-21
    • 1970-01-01
    • 2017-05-05
    • 2021-07-28
    • 2022-01-16
    相关资源
    最近更新 更多