是否有一个集合包含比List更快的Contains和IndexOf方法?

时间:2016-05-17 06:29:12

标签: c# collections

我正在建立一个序列化系统,它在文件的开头放置一个类型表,以便每个被序列化的字段可以简单地在实际数据之前存储其类型的索引(而不是存储完整的类型名称)与每个领域)。要做到这一点,我需要:

  1. 如果不包含,则添加:构建System.Types的集合,同时确保每个元素都是唯一的。
  2. IndexOf:将该集合中字段的类型索引设置为字段前的序列化。
    • 字典对第一个目标有好处,但没有IndexOf。
    • 列表可以做到这两点,但实际上是无效的。 O(N ^ 2)我相信吗?

    这样的集合是否存在?

1 个答案:

答案 0 :(得分:2)

你所描述的已经存在,它被称为......一本字典。你只需要以另一种方式解决问题:索引是你的价值,而不是你的钥匙。

您的方法可能如下所示:

private Dictionary<Type, int> serializationTable = new Dictionary<Type, int>();

public int GetSerializationIndex(Type type)
{
    int index;

    if (!this.serializationTable.TryGetValue(type, out index))
    {
        index = this.serializationTable.Count;
        this.serializationTable.Add(type, index);
    }

    return index;
}