Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有一个集合同时具有比列表更快的Contains和IndexOf方法?_C#_Collections - Fatal编程技术网

C# 是否有一个集合同时具有比列表更快的Contains和IndexOf方法?

C# 是否有一个集合同时具有比列表更快的Contains和IndexOf方法?,c#,collections,C#,Collections,我正在构建一个序列化系统,它在文件的开头放置一个类型表,这样每个被序列化的字段都可以在实际数据之前存储其类型的索引(而不是在每个字段中存储完整的类型名)。为此,我需要: 如果不包含,则添加:以构建System.Types集合,同时确保每个元素都是唯一的 IndexOf:获取集合中字段类型的索引,以便在字段之前序列化 字典对于第一个目标很有用,但没有索引 列表可以同时做这两件事,但实际上效率很低。我相信 这样一个集合存在吗?您所描述的已经存在,它被称为。。。一本字典。你只需要从另一个角度看待

我正在构建一个序列化系统,它在文件的开头放置一个类型表,这样每个被序列化的字段都可以在实际数据之前存储其类型的索引(而不是在每个字段中存储完整的类型名)。为此,我需要:

  • 如果不包含,则添加:以构建System.Types集合,同时确保每个元素都是唯一的
  • IndexOf:获取集合中字段类型的索引,以便在字段之前序列化

    • 字典对于第一个目标很有用,但没有索引
    • 列表可以同时做这两件事,但实际上效率很低。我相信

    这样一个集合存在吗?

    您所描述的已经存在,它被称为。。。一本字典。你只需要从另一个角度看待你的问题:索引是你的值,而不是你的键

    您的方法可以如下所示:

    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;
    }
    
    private Dictionary serializationTable=new Dictionary();
    public int GetSerializationIndex(类型)
    {
    整数指数;
    if(!this.serializationTable.TryGetValue(类型,out索引))
    {
    index=this.serializationTable.Count;
    this.serializationTable.Add(类型,索引);
    }
    收益指数;
    }
    
    为什么不使用自定义indexof方法实现自己的字典?它访问另一个字典,元素作为键,索引作为值<代码>字典好吧,你只是把问题看错了方向。这里的索引是您的值,而不是您的键。一个
    字典
    应该可以做这项工作(反序列化时,您可以创建一个
    字典
    来做相反的工作)谢谢,这让我走上了正确的道路。我无法在添加类型时实际设置索引,因为顺序会改变。相反,我在构建表时在索引0处添加所有内容,然后当我将每个类型写入流时,我设置其索引,以便当每个字段查找其类型索引时,它获得写入流的实际顺序。然后我可以将类型反序列化到另一端的列表中。