我有一个问题,我需要将两个输入映射到一个输出。
我知道字典是一种通用类型的线性映射:
对于每个x(键),可能存在y(值)
我需要的是多维映射:
对于每个x,y(键),可能存在z(值)
但当然,关键是我需要支持通用类型和动态大小。
这种数据结构在C#中存在吗,还是我必须创建一个字典的字典?如果不必要,我宁愿不重复造轮子。
重新发明轮子:
我知道字典是一种通用类型的线性映射:
对于每个x(键),可能存在y(值)
我需要的是多维映射:
对于每个x,y(键),可能存在z(值)
但当然,关键是我需要支持通用类型和动态大小。
这种数据结构在C#中存在吗,还是我必须创建一个字典的字典?如果不必要,我宁愿不重复造轮子。
重新发明轮子:
using System;
using System.Collections.Generic;
using System.Text;
namespace zlib.Collections
{
public class Dictionary3D<Tx, Ty, Tz>
{
private Dictionary<Tuple<Tx, Ty>, Tz> _dict = new Dictionary<Tuple<Tx, Ty>, Tz>();
public void Add(Tx x, Ty y, Tz z)
{
_dict.Add(Tuple.Create<Tx, Ty>(x, y), z);
}
public void Clear()
{
_dict.Clear();
}
public bool ContainsKey(Tx x, Ty y)
{
return _dict.ContainsKey(Tuple.Create<Tx, Ty>(x, y));
}
public bool ContainsValue(Tz z)
{
return _dict.ContainsValue(z);
}
public Dictionary<Tuple<Tx, Ty>, Tz>.Enumerator GetEnumerator()
{
return _dict.GetEnumerator();
}
public bool Remove(Tx x, Ty y)
{
return _dict.Remove(Tuple.Create<Tx, Ty>(x, y));
}
public bool TryGetValue(Tx x, Ty y, out Tz z)
{
return _dict.TryGetValue(Tuple.Create<Tx, Ty>(x, y), out z);
}
public int Count
{
get { return _dict.Count; }
}
public Dictionary<Tuple<Tx,Ty>,Tz>.KeyCollection Keys
{
get
{
return _dict.Keys;
}
}
public Dictionary<Tuple<Tx, Ty>, Tz>.ValueCollection Values
{
get
{
return _dict.Values;
}
}
public Tz this[Tx x, Ty y]
{
get
{
return _dict[Tuple.Create<Tx, Ty>(x, y)];
}
set
{
_dict[Tuple.Create<Tx, Ty>(x, y)] = value;
}
}
}
}
看起来在回答中重新发明轮子是占上风的。这是我迄今为止想出来的代码,但我觉得应该有更好的方法,比如一个矩阵
之类的东西。
new Dictionary3D<Foo,Bar,Baz>();
并且它能像new Dictionary3D<int,int,bool>();
一样正常工作。 - zzzzBov