2016-02-26 69 views
0

最近我遇到了以下问题:
如果给定的值落在值的专用范围内,我想显示一些特殊的内容。 由于在开始我的应用程序之前我不知道这个范围如何看起来像或我需要检查哪些值,我使用Dictionary来将valueranges读作键并将输出读为值。
为了使字典正常工作,我需要重写equals和hash代码函数,并且在这里问题开始了。
我如何可以生成一个散列码,这样,如果我的字典有生成值范围的哈希码

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

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

我解决这是简单地重写的GetHashCode的函数的方式Object购买总是返回-1,所以在任何情况下都需要调用equals方法。这听起来不是一个好主意,但却是我想到的唯一解决方案。

还有什么方法可以将hashcodes的想法映射到值范围,如果是的话,那会是什么样子?

答案的

代码语言也没关系,因为我更感兴趣的一般方法,然后在语言实现

回答

0

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

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

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

AdditionalActionControler.DoSomethingForGivenValue(value)

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

LowStrategy - >如果从范围0值 - 10做点什么

MidStrategy - >如果从范围值11 - 50做别的事情 ...

这种方法:

  • 允许动态地更改策略列表上的元素。
  • 是别人比较容易理解的,
  • 比较容易测试 - 你可以单独测试每个策略。
  • 对未来的修改更加开放。

例如,假设将来你得再添行为是overlaping别人一个新的范围:

NewStrategy - >如果从范围值5 - 20做一件事