.NET中的双向映射

Agn*_*ian 6 .net collections containers data-structures

是否有可用于双向查找的.NET数据结构?

这是问题所在:序列化.我的对象包含一个指向10个预定义静态对象之一的字段.写入文件时,我会写一个字符来表示正在引用10个对象中的哪一个.此时,我需要一个查找数据结构,这将允许我根据被引用的对象获取字符代码.反序列化时,我需要反过来.我可以想到很多其他我可以使用这种数据结构的地方.

Nol*_*rin 6

我将创建一个包含两个通用Dictionary对象的数据结构,这两个通用对象彼此镜像,使得一个的键表示另一个的值,反之亦然.这将允许O(1)在两个方向上进行查找.


Sco*_*ock 5

在只有10个很少会改变的情况下,使用Switch语句的几种方法可能就足够了.

如果您可以控制静态对象,那么它们都可以实现一个返回"序列化代码"字符的新接口:

public interface IStaticObject
{
    char SerializationCode { get; };
}
Run Code Online (Sandbox Code Playgroud)

因此,沿着这个方向前进很简单:someObject.SerializationCode.然后你也可以让你的静态对象都使用一个构造函数,它将SerializationCode注册到一个带有Dictionary的单例实例.

public class SomeStaticObject : IStaticObject
{
    public void SomeStaticObject()
    {
        StaticObjectRegistrar.Register(this.SerializationCode, this);
    }

    public char SerializationCode
    {
        get
        {
            return ?;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

反序列化,您只需获取该字符并通过该字典运行它以获取静态对象.