C# 是否有一个集合同时具有比列表更快的Contains和IndexOf方法?
我正在构建一个序列化系统,它在文件的开头放置一个类型表,这样每个被序列化的字段都可以在实际数据之前存储其类型的索引(而不是在每个字段中存储完整的类型名)。为此,我需要:C# 是否有一个集合同时具有比列表更快的Contains和IndexOf方法?,c#,collections,C#,Collections,我正在构建一个序列化系统,它在文件的开头放置一个类型表,这样每个被序列化的字段都可以在实际数据之前存储其类型的索引(而不是在每个字段中存储完整的类型名)。为此,我需要: 如果不包含,则添加:以构建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处添加所有内容,然后当我将每个类型写入流时,我设置其索引,以便当每个字段查找其类型索引时,它获得写入流的实际顺序。然后我可以将类型反序列化到另一端的列表中。