代码之家  ›  专栏  ›  技术社区  ›  Tom Kidd

每个键有两个值的字典?

  •  37
  • Tom Kidd  · 技术社区  · 15 年前

    我在代码中有一种情况, Dictionary<string, string> 似乎是最好的主意-我需要这些对象的集合,并且我需要通过一个唯一的键来访问它们。字典的概念到底是为了什么,对吧?

    好吧,需求已经扩展到我现在需要为每个键保存额外的信息的程度(如果您好奇的话,这是一个布尔值)。

    所以,我想扩展这个概念,用字符串和布尔值创建一个新的数据结构,现在它是 Dictionary<string, NewCustomObject> .

    然而,对于像布尔标记这样的一个附加值,它感觉就像是被过度杀戮了。然而,我不知道任何像字典这样的普通对象,每个键有两个值。

    仅仅拥有一个自定义对象的字典是实现这一点的最好方法还是有更简单的方案?

    11 回复  |  直到 15 年前
        1
  •  31
  •   Traveling Tech Guy    15 年前

    实际上,您刚才描述的是字典集合的理想用途。它应该包含key:value对,不管值的类型如何。通过使价值成为自己的类,您将能够在将来方便地扩展它,如果需要的话。

        2
  •  15
  •   Community CDub    7 年前

    这个 Multivalue 词典可能满足你的需要。

        3
  •  13
  •   Ed Swangren    15 年前
    class MappedValue
    {
        public string SomeString { get; set; }
        public bool SomeBool { get; set; }
    }
    
    Dictionary<string, MappedValue> myList = new Dictionary<string, MappedValue>;
    
        4
  •  7
  •   Community CDub    7 年前

    我认为一般来说,你会进入到元组的概念中,比如 Tuple<x, y, z> Tuple<string, bool, value> .

    C 4.0将对元组提供动态支持,但除此之外,您还需要自己滚动或下载一个元组库。

    You can see my answer here 在这里我放了一些通用元组类的示例代码。或者我可以把它放在这里:

    public class Tuple<T, T2, T3>
    {
        public Tuple(T first, T2 second, T3 third)
    
        {
            First = first;
            Second = second;
            Third = third;
        }
    
        public T First { get; set; }
        public T2 Second { get; set; }
        public T3 Third { get; set; }
    
    }
    
        5
  •  6
  •   Henk Holterman    15 年前

    在.net4中,可以使用(未选中): Dictionary<string, Tuple<bool,string>>

        6
  •  3
  •   Ralph Caraveo    15 年前

    我不相信.NET内置了多映射,它通常是一种数据结构,可以用来进行这种类型的存储。另一方面,我不认为仅仅使用一个同时包含字符串和布尔值的自定义对象就太过分了。

        7
  •  2
  •   Community CDub    7 年前

    这对你有用吗?

    Dictionary<string, List<string>>
    

    或者你可以用 Tuple 还有一本字典:

    Dictionary<string, Tuple<string, bool>>
    
        8
  •  1
  •   Aggelos Biboudis    15 年前

    tuple总是一个很好的解决方案。此外,在面向对象的方法中,总是倾向于组合而不是继承。构造执行分组的复合对象。简单地说。我想你在这里有一些不错的干净的解决方案,从同事堆垛机。:)

        9
  •  0
  •   Mike Hofer    15 年前

    字典只是对象的键控集合。因此,它将保存您想要的任何类型的对象。即使是最简单的物体,比如 数组 (源于对象),但代表您需要的代码要少得多。

    与其写一个完整的类,不如在值中填充一个动态分配的数组或列表,然后用它运行。

    字典在这种情况下非常灵活。

        10
  •  0
  •   reinierpost    15 年前

    另一个想法是将布尔值存储在单独的数据结构中,例如哈希集。

        11
  •  0
  •   Kamarey    15 年前

    怎么样 Lookup 上课?

    编辑:

    仔细阅读问题后,认为这不是最好的解决方案,但对于字典来说,这仍然是一个不错的解决方案,每个键都有一些值。