C#中的一键多值字典
本文关键字:字典 一键 | 更新日期: 2023-09-27 18:00:15
我经常需要一个键到多个值的字典,但在C#中,它们大多是二维的,比如dictionary和Hashtable。
我想要这样的东西:
var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();
dt内部<>表示数据类型。有人对此有想法吗?
字典是一个键值对,其中的值是根据键获取的。钥匙都是独一无二的。
现在,如果您想要一个具有1个键类型和多个值类型的Dictionary
,您有几个选项:
首先是使用Tuple
var dict = new Dictionary<KeyType, Tuple<string, string, bool, int>>()
另一种是使用(C#4.0及以上版本):
var dict = new Dictionary<KeyType, dynamic>()
CCD_ 5可以具有任何类型的值。
using System;
using System.Linq;
using System.Collections.Generic;
public class Test {
public static void Main(string[] args) {
dynamic d1 = new System.Dynamic.ExpandoObject();
var dict = new Dictionary<int, dynamic>();
dict[1] = d1;
dict[1].FooBar = "Aniket";
Console.WriteLine(dict[1].FooBar);
dict[1].FooBar = new {s1="Hello", s2="World", s3=10};
Console.WriteLine(dict[1].FooBar.s1);
Console.WriteLine(dict[1].FooBar.s3);
}
}
用类描述适当的键字段和适当的值字段并使用这些类型的词典。
var dictionary = new Dictionary<TheKeyType, TheValuesType>();
注意:如果有多个值作为键,则需要定义一个类来封装这些值,并提供GetHashCode和Equals的适当重写,以便字典能够识别它们的相等性。
除此之外,您还可以使用元组,但您希望限制这种模式,因为元组不是自我描述的。
var dictionary = new Dictionary<Tuple<Key1Type, Key2Type, Etc>, Tuple<Value1Type, Value2Type, Etc>>();
我建议不要使用Tuple,这是一个非常有效的解决方案,而是创建自己的类作为键和/或值。
您可能会意识到元组将成为一个难以阅读的代码。
使用元组作为键。
var d = new Dictionary<Tuple<string,string,bool,int>,any-data-typs>();