为值范围

时间:2016-02-26 05:49:28

标签: .net dictionary hashcode

最近我遇到了以下问题:
如果给定值落在专用值范围内,我想显示一些特殊的值。 由于在开始我的应用程序之前我不知道这个范围是什么样的或者我需要检查哪些值,我使用Dictionary来读取值范围作为键,输出作为值。
为了使字典工作,我需要覆盖equals和hash代码函数,这里问题就出现了 如何生成哈希码,以便我的词典包含

//This is pseudo code
[0|10]->Low
[11|50]->Medium
[51-100]->High

我查询2,我的词典返回Low

我解决这个问题的方法是简单地覆盖Object buy总是返回-1的getHashcode函数,这样无论如何都需要调用equals方法。这听起来不是一个好主意,但却是我想到的唯一解决方案。

是否有任何方法可以将哈希码的概念映射到值范围,如果是,那会是什么样的?

Answers的代码语言并不重要,因为我对语言实现中的一般方法更感兴趣

1 个答案:

答案 0 :(得分:0)

您尝试使用Dictionary的方式会误导将来尝试理解您的代码的任何人。 Dictionary是最常用的结构之一。每个程序员和应用程序都希望符合IDictionary接口的对象以某种方式运行,并将一个键连接到一个值。

我的建议是使用策略模式。

创建一个类AdditionalActionControler,其中包含可能的显示操作列表(策略接口列表)。您可以通过执行:

来使用它

AdditionalActionControler.DoSomethingForGivenValue(value)

此方法对列表中的每个策略对象执行TryDoSomethingForGivenValue。 方法TryDoSomethingForGivenValue实现:

LowStrategy - >如果0到10范围内的值做某事

MidStrategy - >如果范围11 - 50的值做其他事情 ...

这种方法:

  • 允许动态更改策略列表中的元素。
  • 更容易被他人理解,
  • 更容易测试 - 您可以单独测试每个策略。
  • 对未来的修改更加开放。

例如,假设您将来必须为与其他人重叠的新范围添加另一种行为:

NewStrategy - >如果5到20之间的值再做一件事