如何制作具有多个键和便宜的 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
}
本质上我想做的是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
}