2017-07-20 116 views
-2

我需要一個散列函數,它將值0-9映射到0,10-19到1,20-29到2,30-39到3和-1到-9到-1, 10到-19到-2等散列函數計算

int hash (int value) { 
    return (int)(value/10); 
} 

適用於正數,但0到-9映射到0和負數是錯誤的。我能做些什麼來彌補這一點?

+2

如何將'0'映射爲** ** 1和'-1'? – QBrute

+0

已修復。負數應該給一個負散列,我只是包含十進制值(-0.00000001),但真的這個函數需要一個整數,所以應該沒關係 –

+0

爲什麼這有Java標記? –

回答

7

好吧,這並不難,是嗎。

int val = value/10; 
if(value < 0) 
    val--; 
return val; 
+0

'return(value - (value <0?1:0))/ 10;'可能會更好,但我懷疑任何可以使這個醜陋的哈希函數更好。 – Slava

+1

只有當您打算編寫儘可能難以閱讀的代碼時,它纔會「更好」。 – Kayaman

+0

我只是想知道是否有一種數學方法,而不是使用條件,但我猜不是。 –