我有一组看起来像这样的数据:
001 001 One
001 002 Two
001 003 Three
002 001 One
002 002 Two
002 003 Three
...
Run Code Online (Sandbox Code Playgroud)
现在,当然,我可以创建一个string [x] [y] = z的数组,但是这个数组必须是可调整大小的,我更喜欢使用索引器的字符串表示而不是转换为数字.原因是我需要按字符串查找数据,而且我没有看到不必要的字符串 - >数字转换的重点.
我的第一个想法是:
Dictionary<string, Dictionary<string, string>> data;
data = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> subdata = Dictionary<string, string>();
subdata.Add(key, string);
data.add(key2, subdata);
Run Code Online (Sandbox Code Playgroud)
这有效,但有点麻烦.它也感觉错误和kludgy,并不是特别有效.
那么在集合中存储这种数据的最佳方法是什么?
我还想过创建我自己的集合类,但是如果我不需要的话我宁愿不去.我宁愿只使用现有的工具.
这是非常常见的请求,大多数人最终都会编写一些Tuple类的变体.如果您使用的是ASP.Net,则可以使用Triple已经可用的类,否则,请执行以下操作:
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; }
}
Run Code Online (Sandbox Code Playgroud)
有一个通用的三元组类,所以你可以创建一个新的List<Tuple<string, string, string>>()并创建你的元组并添加它们.使用一些索引功能扩展该基本类,然后你就可以了.
编辑:带有字典的列表似乎不是正确的方法,因为每个字典只保存一个值.键和值之间没有多项关系 - 只有一个多部分键和一个关联值.数据等同于数据库行(或元组!).
Edit2:这是一个可以为方便起见的可索引列表类.
public class MyTupleList : List<Tuple<string, string, string>>
{
public Tuple<string, string, string> this[string first, string second]
{
get
{
return (this.Find(x => x.First == first && x.Second == second));
}
set
{
this[first, second] = value;
}
}
}
Run Code Online (Sandbox Code Playgroud)