2016-02-26 114 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做一件事