【发布时间】:2011-01-09 23:44:43
【问题描述】:
我需要一种专门的字典。我的用例是这样的:用户想要指定值的范围(范围也可以是一个点)并将值分配给特定的范围。然后,我们希望使用单个值作为键来执行查找。如果此单个值出现在某个范围内,那么我们将返回与该范围关联的值。
例如:
// represents the keyed value
struct Interval
{
public int Min;
public int Max;
}
// some code elsewhere in the program
var dictionary = new Dictionary<Interval, double>();
dictionary.Add(new Interval { Min = 0, Max = 10 }, 9.0);
var result = dictionary[1];
if (result == 9.0) JumpForJoy();
这显然只是一些代码来说明我在寻找什么。有谁知道实现这种事情的算法?如果可以,请他们指点我吗?
我已经尝试实现自定义 IEqualityComparer 对象并在 Interval 上重载 Equals() 和 GetHashCode() 但到目前为止无济于事。不过可能是我做错了什么。
【问题讨论】:
-
您必须实现自己的自定义集合。我认为您无法使用标准 Dictionary 类满足您的要求。
-
因为你的区间界限是整数,如果你的域足够小并且没有两个区间重叠,你可以只使用一个双精度数组。在您的示例中,索引 0 到 10 处的数组元素将设置为 9.0。然后查找是 O(1)。
-
我会说正确覆盖
Equals会给你正确的结果,但这意味着你不能有两个键在字典中重叠在一起 -
也许是 SortedSet
?
标签: c# .net dictionary lookup