【问题标题】:Looking for an alterantive to List<KeyValuePair<string, KeyValuePair<string, string>>>寻找 List<KeyValuePair<string, KeyValuePair<string, string>>> 的替代品
【发布时间】:2009-06-24 16:46:06
【问题描述】:

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

List<KeyValuePair<string, KeyValuePair<string, string>>>

它不太可能变得庞大(我估计

谁能想到一些更好的内置类型替代方案?

【问题讨论】:

标签: c# .net-2.0


【解决方案1】:

最好的选择是包装你自己的 Tuple 类,有点像shipping in .NET 4.0

那么你可以有一个:

List<Tuple<string,string,string>>

这很容易在 .NET 2.0 中编写 - 它基本上只是三个值,而不是 KeyValuePair 中的 2。不过,.NET 2.0 中没有内置的三元组值等效项。


编辑:

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

即使您在 key1 中没有唯一值,您也可以通过以下方式显着加快任何类型的查询/搜索:

Dictionary<string, List<KeyValuePair<string,string>>>

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

【讨论】:

  • 我喜欢字典版本 - 我也想出了一些类似的东西(作为一种按方法分组) - 我可能会在现在的那个字符串上多次搜索那个字典键
【解决方案2】:
struct MrStruct
{
   public string Key1,
   public string Key2,
   public string Value1
}


List<MrStruct>;

这是假设您按照您所说的迭代顺序访问列表。潜在地,其他数据结构的搜索速度可能更快。

【讨论】:

  • 简单明了-我喜欢它-这会比我在key1上查询的性能更好吗?
  • 如果 key1 是唯一的,您可以考虑 SortedList,否则您可以根据 MrStruct.Key1 对 List 进行排序以提高性能。
  • 你在做什么类型的查询?如果 Key1 是唯一的,那么使用字典会快得多……
  • 取决于几个不同的因素,您可以按 Key1 对键进行排序,并假设 Key1 是唯一的,您可以对其进行二进制搜索,从而为您提供近似的 o(log n) 搜索时间。由于您的也在列表中,而不是像哈希表这样的东西,我认为这将是您可以执行的最快搜索。
  • Key1 不是唯一的(否则会选择字典)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 1970-01-01
相关资源
最近更新 更多