【问题标题】:How to make a dictionary with multiple keys, and a cheap Contains operation?如何制作具有多个键的字典和廉价的包含操作?
【发布时间】:2015-11-16 12:53:24
【问题描述】:

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

【问题讨论】:

  • 您可以使用底层的Ductionary<TKey, ValueHolder<TValue>>ValueHolder<T> 作为用于间接的私有类来实现它。也许你甚至不需要那个,但你可以复制这个值。
  • @LucasTrzesniewski 这就是我所需要的,谢谢!

标签: c# .net dictionary key


【解决方案1】:

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

例如:

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
}

【讨论】:

  • 这正是我所需要的。谢谢 :) (将接受 3)
  • 干杯!为方便起见,您可以找到包装器实现here
猜你喜欢
  • 2012-04-24
  • 2021-02-28
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 2015-11-15
  • 2021-12-14
  • 2013-05-21
  • 1970-01-01
相关资源
最近更新 更多