【问题标题】:Generate Hashcode for Valueranges为值范围生成哈希码
【发布时间】:2016-02-26 05:49:27
【问题描述】:

最近遇到如下问题:
如果给定的值落在一个特定的值范围内,我想显示一些特别的东西。 由于在开始我的应用程序之前我不知道这些范围的外观或我需要检查哪些值,因此我使用字典将值范围读取为键并将输出读取为值。
为了使字典正常工作,我需要覆盖等号和哈希码函数,问题就从这里开始了。
如何生成哈希码,以便如果我的字典包含

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

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

我解决这个问题的方法是简单地覆盖 Object buy 的 getHashcode 函数,该函数总是返回 -1,因此在任何情况下都需要调用 equals 方法。这听起来不是一个好主意,但这是我想到的唯一解决方案。

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

Answers 的代码语言无关紧要,因为我对通用方法比语言实现更感兴趣

【问题讨论】:

    标签: .net dictionary hashcode


    【解决方案1】:

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

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

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

    AdditionalActionControler.DoSomethingForGivenValue(value).

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

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

    MidStrategy -> 如果 11 - 50 范围内的值执行其他操作 ...

    这种方法:

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

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

    NewStrategy -> 如果 5 - 20 范围内的值再做一件事

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2014-12-31
      • 2021-05-14
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多