2017-02-13 27 views
0

我有一個簡單的問題,由於缺乏知識我無法解決,而且我在網上找不到任何線索。從數字列表中生成一個值

我想:

  • 生成從數(INT的陣列)的列表的 「值1」。
  • 從隨機數生成「值2」。
  • 然後通過比較「值2」和「值1」來檢查號碼列表中是否存在隨機數。

爲什麼我想生成這些值,而不是簡單地做一個數組列表中隨機數的數組搜索?

因爲有必要隱藏號碼列表,並且能夠通過比較值進行快速檢查。

我曾想過「散列」方法,但沒有辦法散列int數組。

我也想過RSA密碼系統,從數字列表生成一個「私鑰」,然後從隨機數生成「公鑰」。但我找不到實現它的方法。

我想知道是否有辦法做我想做的事情?

謝謝你的幫助。


實施例:

在PHP服務器具有號碼的列表。 (例如:[10,20,24,6,98])

JS中的客戶端向服務器發送一個號碼。 (實施例:8)

然後

// [10, 20, 24, 6, 98] to hashed or key 
$computedIntArray = HashedOrRsaEncrypted($ServerIntArray); 

// 8 to hashed or key 
$computedClientNumber = HashedOrRsaEncrypted($ClientNumber); 

// return true if the clienthashedvalue is present in the serverIntArray 
$trueOrFalse = IsPresentInArray($computedClientNumber, $computedIntArray); 

回答

0

用於產生,例如10個非重複的隨機數,則可以使用一個散列表。

var hash = {}, 
 
    l = 10, 
 
    r; 
 

 
while (l) { 
 
    r = Math.floor(Math.random() * 100); 
 
    if (!hash[r]) { 
 
     hash[r] = true; 
 
     l--; 
 
    } 
 
} 
 

 
console.log(Object.keys(hash).map(Number));
.as-console-wrapper { max-height: 100% !important; top: 0; }

隨着ES6,你可以使用一個Set,並添加值,直到集合的大小有想要的計數。

var hash = new Set, 
 
    l = 10; 
 

 
while (hash.size < l) { 
 
    hash.add(Math.floor(Math.random() * 100)); 
 
} 
 

 
console.log([...hash]);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

我想你是誤會我的問題。它不是關於生成隨機數,而是關於從一個數字列表中生成一個散列或一個私鑰或一個值,並對一個隨機數(例如5)進行相同操作。然後能夠比較散列或密鑰(私有/公共)或值,以便知道隨機數是否存在於數字列表中。 – NoSkiiilL

+0

對,爲了測試一個數字是否已經在使用,你可以使用一個對象作爲散列表或一個集合。但問題在哪裏? –

+0

我編輯了我的文章並添加了一個示例。我開始想,也許我想做的事情是不可能的。對不起,我找不到表達自己的另一種方式,英語不是我的母語。謝謝你的幫助。 – NoSkiiilL

相關問題