【问题标题】:Structure to hold 3 columns and lookup for a row fast by any of the columns保存 3 列并通过任何列快速查找行的结构
【发布时间】:2012-06-09 07:36:59
【问题描述】:

我们有一个哈希表作为对如下值列表的只读引用:

internal static readonly Hashtable relationcodeAcodeB = new Hashtable
{
    {"149", "23"},
    {"139", "17"}
}

现在我们需要一个可以容纳 3 个值(列)并通过其他 2 个值快速查找值的结构。

类似这样的:

internal static readonly Hashtable relationcodeAcodeBcodeC = new Hashtable
{
    {"149", "23", "xx"},
    {"139", "17", "xxx"}
}
string codeB=relationcodeAcodeBcodeC[codeA="149"]["codeB"];

【问题讨论】:

  • 你有什么理由不使用泛型集合吗?
  • 这实际上是一个非常有趣的问题(赞成!);显然有多种解决方案,但我很好奇最快/最干净甚至正确的方法是什么。顺便说一句,您应该澄清一下:标题由任何一列表示,而问题由任何其他两个表示。差别很大。
  • 同意 Cloud - 如果您澄清一下,这可能是一个有趣的问题。
  • 好吧,我没有看到混乱...如果您搜索 A 列,您会通过其他两个而不是您正在寻找的那个来搜索,不是吗?那你会如何澄清标题?
  • @Jon Skeet 我正在使用哈希表,因为它是获取这些数据并访问它的最快/最简单(理论上)的方式,现在我们有 3 列它不适用......如果你知道一些方法可以用 3 列和通用集合简单地完成它,请随意放弃答案;)

标签: c# data-structures hashtable


【解决方案1】:

假设你的对象有三个属性codeA、codeB和codeC,你维护三个哈希表,像这样:

Dictionary<string, MyObj> dictA, dictB, dictC;

创建新的MyObj 时,将其添加到三个字典中:

dictA[obj.codeA] = obj;
dictB[obj.codeB] = obj;
dictC[obj.codeC] = obj;

查找非常容易。您的示例将被编码为dictA["149"].codeB

当然,在一个大的查找类中保持一切整洁。

【讨论】:

  • 简单地拥有另一列是不是太复杂了?这意味着拥有 3 个不同的字典并分别填写它们......
  • 这取决于,您希望查找高效吗?这样查找在 O(1) 中完成。而且实施起来真的不是那么难。如果您只想扫描对象列表并找到正确的对象,那么您最终会得到一个更长的 O(N) 解决方案。
  • 我正在像这样作为试验来实现它,但是它需要比哈希表更多的代码行来初始化并且不能再只读了......这个案例没有被处理似乎很奇怪到目前为止更适合的对象
  • 不,不,创建一个查找类来执行查找,并将三个字典隐藏在其中。您的查找实例可以是只读的。
猜你喜欢
  • 2019-10-04
  • 2019-09-24
  • 2014-06-23
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
相关资源
最近更新 更多