C#字典每键值两个值?
我有一个代码的情况下,一个Dictionary<string, string>
似乎是最好的想法 – 我需要这些对象的集合,我需要他们通过一个唯一的键访问。 究竟是什么字典的概念是对的?
那么需求已经扩展到现在我需要为每个按键额外保留一点信息的地方(如果你好奇的话,它是一个布尔值)。
所以,我想通过扩展这个概念来创build一个带有string和布尔值的新数据结构,现在它已经成为一个Dictionary<string, NewCustomObject>
。
然而,像一个布尔标志只是一个额外的值,它只是感觉像矫枉过正。 但是我不知道每个键有两个值的字典式通用对象。
只是有一个自定义对象的词典是最好的方式去做这个或者有一些更简单的这种情况?
其实,你刚刚描述的是Dictionary集合的理想用法。 它应该包含键值对,而不pipe值的types。 通过将价值赋予自己的职业,如果需要的话,将来可以很容易地将其扩展。
多值字典文章可能会满足您的需求。
class MappedValue { public string SomeString { get; set; } public bool SomeBool { get; set; } } Dictionary<string, MappedValue> myList = new Dictionary<string, MappedValue>;
我想通常你会进入Tuple的概念 – 像Tuple<x, y, z>
或者Tuple<string, bool, value>
。
C#4.0将会对元组进行dynamic支持,但除此之外,你需要自己动手或者下载一个Tuple库。
你可以在这里看到我的答案 ,我把一些generics类的示例代码。 或者我可以在这里重新发布:
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; } }
在.NET4中,你可以使用(unchecked): Dictionary<string, Tuple<bool,string>>
我不相信.net有内置的多地图,通常是一个数据结构,你可以用它来做这种types的存储。 另一方面,我不认为这只是使用一个自定义对象,同时拥有一个string和布尔值的矫枉过正。
这不适合你吗?
Dictionary<string, List<string>>
或者你可以使用一个元组,并有一个字典:
Dictionary<string, Tuple<string, bool>>
元组永远是一个很好的解决scheme。 此外,在面向对象的方法中,总是偏爱合成而不是inheritance。 构build一个组合对象进行分组。 只是。 我想你在这里覆盖了一些很好的和干净的解决scheme,从stackoverflow'ers。 🙂
字典只是对象的键控集合。 因此,它将持有你想要的任何types的对象。 即使是最简单的对象,比如说一个数组 (来源于Object),但是却需要更less的代码。
而不是编写一个完整的类,填充一个dynamic分配的数组或一个List中的值,然后运行。
字典是非常灵活的方式。
另一个想法是将布尔值存储在单独的数据结构中,例如HashSet。
查找类怎么样?
编辑:
仔细阅读这个问题后,认为这不是最好的解决scheme,但对于单个键值有所不同的字典来说,它仍然是一个不错的select。