C# 正在查找列表的替代项<;KeyValuePair<;字符串,KeyValuePair<;字符串,字符串>&燃气轮机&燃气轮机;

C# 正在查找列表的替代项<;KeyValuePair<;字符串,KeyValuePair<;字符串,字符串>&燃气轮机&燃气轮机;,c#,.net-2.0,C#,.net 2.0,最终得到了这种糟糕的数据结构: List<KeyValuePair<string, KeyValuePair<string, string>>> 列表 它不太可能变得巨大(struct-MrStruct) { 公共字符串键1, 公共字符串键2, 公共字符串值1 } 列表 这是假设您正在按顺序访问列表,正如您所说的迭代。其他数据结构可能会更快地进行搜索。最好的选择是包装您自己的元组类,有点像这样 那么你就可以有一个: List<Tuple<st

最终得到了这种糟糕的数据结构:

List<KeyValuePair<string, KeyValuePair<string, string>>>
列表
它不太可能变得巨大(
struct-MrStruct)
{
公共字符串键1,
公共字符串键2,
公共字符串值1
}
列表

这是假设您正在按顺序访问列表,正如您所说的迭代。其他数据结构可能会更快地进行搜索。

最好的选择是包装您自己的元组类,有点像这样

那么你就可以有一个:

List<Tuple<string,string,string>>
列表
这在.NET2.0中编写非常简单-它基本上只是一个三元组的值,而不是一个KeyValuePair中有2个。不过,在.NET2.0中没有三元组值的内置等效项


编辑:

在阅读了你在另一篇文章中关于查询的评论后,我想我也应该提到这一点-

即使键1中没有唯一的值,也可以通过使用以下命令大大加快任何类型的查询/搜索速度:

Dictionary<string, List<KeyValuePair<string,string>>>
字典

然后,您可以通过第一个元素中的键来查找它们的列表,而不是存储单个KeyValuePair。如果您需要查找具有给定第一个键的所有元素,这将快得多…

这个问题的答案可能会很有帮助,简单明了-我喜欢它-这会比我查询的更好吗如果KEY1是唯一的,你可以考虑SORTEDLIST,否则你可以根据MRSRealth.KEY1对你的性能进行排序。你在做什么类型的查询?如果KEY1是唯一的,使用字典会更快很多……取决于几个不同的因素,你可以通过KEY1对密钥进行排序,并且假设KEY1是唯一的。可以对它进行二进制搜索,这会给你一个大约o(logn)的搜索时间。因为你的也在一个列表中,而不是一个哈希表,我认为这大概是你可以执行的最快搜索。Key1不是唯一的(否则会选择字典)我喜欢字典版本——我也提出了一些类似的东西(作为一种分组方法)——我可能会在现在是关键的字符串上搜索字典很多次
Dictionary<string, List<KeyValuePair<string,string>>>