首页 > 解决方案 > 多个列表或字典?

问题描述

我在 Unity3D 中使用 C# 工作。我需要一个结构来保存一些值。我需要通过字符串索引访问该结构,并且值是 GameObjects(但这个问题适用于任何可能的值,它是相同的)。我不知道我将在每个索引上存储多少个对象,所以它不能是一个数组。我想在一

Dictionary<string,List<GameObject>>

但是可以在我添加索引的同时将项目添加到该列表中吗?因为如果我需要在将其添加到字典之前填写列表,我可以拥有 X 个列表而忘记字典。

实现这一目标的最佳结构是什么?

标签: c#arrayslistdictionary

解决方案


您可以实现自己的多字典

public class MultiDictionary<TKey, TValue> : Dictionary<TKey, List<TValue>>
{
    public void Add(TKey key, TValue value)
    {
        if (TryGetValue(key, out List<TValue> valueList)) {
            valueList.Add(value);
        } else {
            Add(key, new List<TValue> { value });
        }
    }
}

请注意,我正在添加一种Add能够自动添加单个值而无需处理列表的方法。该类继承了Add允许您还添加整个列表的原始方法。

Dictionary<TKey, HashSet<TValue>>或者,如果您需要添加唯一值并且顺序无关紧要,您可以创建一个。


推荐阅读