我有一個函數,它需要一組值和一個採樣率。該函數應該隨採樣率去除值。例如,20%的採樣率應該消除20%的值。我如何才能以非常出色的性能實現這一目標,因爲我將迭代超過10,000個值?具有良好性能的陣列中的採樣值
我的想法是一樣的東西
for(var i = values.length-1; i >= 0; i--){
var rnd = Math.floor((Math.random() * 100) + 1);
if(rnd < samplingRate)
values.splice(i,1);
}
但我認爲Math.random()
功能沒有高性能的選擇。
首先,我需要澄清:你想爲你描述刪除所有值的20%,在文字,或刪除每個值有20%的機會,這是你在代碼中做的事情嗎?他們是兩個完全不同的東西。在任何情況下,除非你編寫自己的RNG,否則'Math.random'沒有辦法,這幾乎不會有更好的表現。 – RoToRa 2014-08-30 12:31:15
我做了一個編輯我的問題。這就像我在文中所寫的一樣。 – 2014-08-30 12:34:00
我不認爲彼此之後有很多'splice'操作有很好的性能(相比之下'Math.random'調用應該可以忽略不計)。你可能想嘗試['filter'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)(儘管這會創建一個新的數組,而不是將它們從'values'中移除) – Bergi 2014-08-30 12:47:33