如何在C#中创建多值字典?
例如Dictionary<T,T,T>,第一个T是键,其他两个是值。
因此这是可能的: Dictionary<int,object,double>
谢谢
如何在C#中创建多值字典?
例如Dictionary<T,T,T>,第一个T是键,其他两个是值。
因此这是可能的: Dictionary<int,object,double>
谢谢
Answers:
只需创建一个Pair<TFirst, TSecond>类型并将其用作您的值即可。
我在C#中的Depth源代码中有一个示例。为简单起见,此处转载:
using System;
using System.Collections.Generic;
public sealed class Pair<TFirst, TSecond>
: IEquatable<Pair<TFirst, TSecond>>
{
private readonly TFirst first;
private readonly TSecond second;
public Pair(TFirst first, TSecond second)
{
this.first = first;
this.second = second;
}
public TFirst First
{
get { return first; }
}
public TSecond Second
{
get { return second; }
}
public bool Equals(Pair<TFirst, TSecond> other)
{
if (other == null)
{
return false;
}
return EqualityComparer<TFirst>.Default.Equals(this.First, other.First) &&
EqualityComparer<TSecond>.Default.Equals(this.Second, other.Second);
}
public override bool Equals(object o)
{
return Equals(o as Pair<TFirst, TSecond>);
}
public override int GetHashCode()
{
return EqualityComparer<TFirst>.Default.GetHashCode(first) * 37 +
EqualityComparer<TSecond>.Default.GetHashCode(second);
}
}
如果您尝试将值分组在一起,那么这可能是创建简单结构或类并将其用作字典中的值的绝佳机会。
public struct MyValue
{
public object Value1;
public double Value2;
}
那你就可以拥有字典
var dict = new Dictionary<int, MyValue>();
您甚至可以更进一步,实现自己的字典类,该字典类将处理所需的任何特殊操作。例如,如果您想让Add方法接受一个int,object和double
public class MyDictionary : Dictionary<int, MyValue>
{
public void Add(int key, object value1, double value2)
{
MyValue val;
val.Value1 = value1;
val.Value2 = value2;
this.Add(key, val);
}
}
那么您只需像这样实例化并添加到字典中,就不必担心创建'MyValue'结构:
var dict = new MyDictionary();
dict.Add(1, new Object(), 2.22);
Dictionary<T1, Tuple<T2, T3>>
编辑:对不起-我忘了你直到.NET 4.0出来后才得到元组。天哪!
我认为这对于字典语义来说是过高的,因为字典从定义上来说是键及其各自值的集合,就像我们看到一本语言词典的方法一样,该书包含一个单词作为键,其描述性含义为值。
但是您可以表示一个可以包含值集合的字典,例如:
Dictionary<String,List<Customer>>
或者将键和值的字典作为字典:
Dictionary<Customer,Dictionary<Order,OrderDetail>>
然后,您将拥有一个可以包含多个值的字典。
myColl[0][1]...看起来像多维数组。当您开始嵌套集合时,我相信是时候适当地封装“值”集合了。
我认为您不能直接这样做。您可以创建一个同时包含object和的类,double然后将其实例放入字典中。
class Pair
{
object obj;
double dbl;
}
Dictionary<int, Pair> = new Dictionary<int, Pair>();
我解决了使用:
Dictionary<short, string[]>
像这样
Dictionary<short, string[]> result = new Dictionary<short, string[]>();
result.Add(1,
new string[]
{
"FirstString",
"Second"
}
);
}
return result;
我知道这是一个旧线程,但是-由于未提及,因此可以正常工作
Dictionary<string, object> LookUp = new Dictionary<string, object>();
LookUp.Add("bob", new { age = "23", height = "2.1m", weight = "110kg"});
LookUp.Add("jasper", new { age = "33", height = "1.75m", weight = "90kg"});
foreach(KeyValuePair<string, object> entry in LookUp )
{
object person = entry.Value;
Console.WriteLine("Person name:" + entry.Key + " Age: " + person.age);
}
这是C#中使用基于集合的键类型的单键到多值映射的实现:
https://github.com/ColmBhandal/CsharpExtras/blob/master/CsharpExtras/Dictionary/MultiValueMapImpl.cs
字典的行为类似于从键类型到值类型的集合的常规字典,但还提供了直接添加值类型的单个值的功能,并且在后台处理基础集的创建和/或添加。该集。