2016-11-29 39 views
0

我有這個問題。我想根據任意6個字母的字符串從數組中隨機選擇一個選項,以便在字符串相同的情況下該選項總是相同的。根據字符串半任意地從數組中進行選擇

所以,如果我有字符串「dogdog」函數將返回始終'3'例如,但'4'爲「bigcat」等

我認爲解決的辦法可能是第一個散列的字符串。如何將哈希字符串轉換爲數組中的選擇?

回答

1

您可以從一個字符串計算一個散列值,並獲取數組項目[hash % array.length]。與DJB hashfunc一個例子(見http://www.cse.yorku.ca/~oz/hash.html更多):

function djbHash(s) { 
 
    let hash = 5381; 
 

 
    for (let c of s) { 
 
     hash = hash * 33 + c.charCodeAt(0); 
 
    } 
 
    return hash; 
 
} 
 

 
function mapToValues(s, values) { 
 
    return values[djbHash(s) % values.length]; 
 
} 
 

 
console.log(mapToValues('dogdog', [1, 2, 3, 4])); 
 
console.log(mapToValues('bigcat', [1, 2, 3, 4]));

+0

這是一個很好的解決方案,因爲哈希函數具有良好的分佈。更好的散列函數會給出更好的結果! –

0

一個非常簡單的哈希函數:

  • 更改您的單詞的每個字母一個數字(a爲1,B爲2,等等)。我們打電話w整個單詞在一個數字中改變。
  • 計算 = 瓦特 MOD 4. 將是0和3之間的數加1到它。恭喜,您現在可以將任何單詞與1到4之間的「隨機」數字相關聯。當然,您可以用任何其他數字替換4,以將每個世界與任意範圍內的隨機數相關聯。
+0

你的隨機數的算法給出了一個非常糟糕的分佈。 –