C#字典每个键有两个值?

时间:2009-09-30 21:47:13

标签: c# generics dictionary

我在代码中有一种情况Dictionary<string, string>似乎是最好的主意 - 我需要这些对象的集合,我需要通过一个唯一的密钥来访问它们。究竟是什么字典概念,对吗?

嗯,这些要求已经扩展到我现在需要为每个键保存一点额外信息的点(如果你很好奇,则是一个布尔值)。

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

然而,对于像布尔标志这样的一个额外值,它只是感觉有点过分。然而,我不知道任何类似字典的通用对象,每个键有两个值。

只是拥有自定义对象词典是最好的解决方法,还是有更简单的方法?

11 个答案:

答案 0 :(得分:31)

实际上,您刚刚描述的是Dictionary集合的理想用法。无论值的类型如何,它都应该包含键:值对。通过将值设为自己的类,如果需要,您将来可以轻松扩展它。

答案 1 :(得分:15)

Multivalue字典帖子可能会满足您的需求。

答案 2 :(得分:13)

class MappedValue
{
    public string SomeString { get; set; }
    public bool SomeBool { get; set; }
}

Dictionary<string, MappedValue> myList = new Dictionary<string, MappedValue>;

答案 3 :(得分:7)

我认为通常你会进入元组的概念 - 类似于Tuple<x, y, z>Tuple<string, bool, value>

C#4.0将为元组提供动态支持,但除此之外,您需要自己动手或下载Tuple库。

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; }

}

答案 4 :(得分:6)

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

答案 5 :(得分:3)

我不相信.net内置了Multi-Map,它通常是一种可用于执行此类存储的数据结构。另一方面,我认为只使用一个包含字符串和布尔值的自定义对象完全是不合适的。

答案 6 :(得分:2)

这不适用于你吗?

Dictionary<string, List<string>>

或者你可以使用Tuple并有一个字典:

Dictionary<string, Tuple<string, bool>>

答案 7 :(得分:1)

元组总是一个很好的解决方案。此外,在面向对象的方法中,总是倾向于组合而不是继承。构造执行分组的复合对象。只是。我认为你在这里有一些很好的和干净的解决方案,来自其他stackoverflow'ers。 :)

答案 8 :(得分:0)

词典只是一个关键的对象集合。因此,它将包含您想要的任何类型的对象。即使是最简单的对象,例如 array (派生自Object),但代表您需要更少的代码。

不是编写整个类,而是在值中填充动态分配的数组或List,然后运行它。

字典非常灵活。

答案 9 :(得分:0)

Lookup班怎么样?

修改

在仔细阅读之后,请仔细考虑这不是最好的解决方案,但对于字典来说,它仍然是一个很好的解决方案,每个单独的键都有一些值。

答案 10 :(得分:0)

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