如何制作具有多个键和便宜的 Contains 操作的字典?

How to make a dictionary with multiple keys, and a cheap Contains operation?

本质上我想做的是Dictionary<List<TKey>, TValue>。我想要许多指向值的值(粗略的草图:)是的,这个 可以 Dictionary<List<TKey>, TValue> 完成,但我还需要检查是否存在一个键(本质上-我得到了 A 到 Z 的值,我需要查找它们是否是键,如果是,则检索与它们关联的值)并遍历每个列表以找到该值似乎是一个非常昂贵的操作(我还没有测试过,但我只是觉得这个手术贵得离谱)。我见过 MultiValueDictionary 但不是多键字典。有什么帮助吗?谢谢:)

我建议您使用一个简单的 Dictionary<TKey, TValue>,它可能会将您的键映射到相同的值。如果您担心 TValue 是一种值类型,需要对其所有关联的键进行一致更新,那么请在其周围使用 class 包装器,以便所有上述键都指向同一个实例。

例如:

public class Wrapper<TValue>
{
    public TValue Value { get; set; }
}

static void Main(string[] args)
{
    var d = new Dictionary<char, Wrapper<int>>();
    d.Add('A', new Wrapper<int> { Value = 1 });
    d.Add('B', d['A']);   // same value as 'A'
    d.Add('C', new Wrapper<int> { Value = 2 });
    d.Add('D', new Wrapper<int> { Value = 3 });
    d.Add('E', d['D']);   // same value as 'D'
    d.Add('F', d['D']);   // same value as 'D'

    d['B'].Value--;   // decrement 'B' value from '1' to '0'
    Console.WriteLine(d['A'].Value);   // new value shows up for 'A' too
}