我需要以下功能,并且它必須是高性能的。我真的不知道該怎么做。
function(value: string): number { ... }
回傳的數字需要在 0 到 15 之間,并且對于給定的字串總是回傳相同的數字。顯然允許重復!
不久前我在 Node 上做了類似的事情,但我認為這對于我的用例來說性能不夠:
function(value: string): number {
const hash = crypto.createHash("sha256");
const hexValue: string = hash.update(value).digest("hex");
const shortenedHexValue = hexValue.substring(0, 2);
const decimalValue = parseInt(shortenedHexValue, 16);
return decimalValue / 2.55;
}
對于給定的字串,此函式回傳 > 0 到 ~100 的值。
uj5u.com熱心網友回復:
根據您帖子下的評論,您需要一些看起來“隨機”的東西,所以您不能這樣做:
function hash15(value: string): number {
return 0;
}
如果它符合您的所有規格,則事件。
對于隨機部分,我們可以使用字串中每個字符的 ASCII 碼,正如@Alois Christen 建議的那樣:
function hash15(value: string): number {
let res = 0;
for (let i = 0; i < value.length; i ) {
res = value.charCodeAt(i);
}
return res % 16;
}
如果您需要它更快,您可以跳過字符:
function hash15(value: string): number {
let res = 0;
for (let i = 0; i < value.length / 2; i =2) {
res = value.charCodeAt(i);
}
return res % 16;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/526595.html
上一篇:是否有任何模式可以應用多個靈活的業務規則來允許操作發生?
下一篇:為什么復雜度為O(n^2)?
