2015-09-14 51 views

回答

0

Fisher–Yates shufflegithub(修改):

fisherYates = (arr) -> 
    i = arr.length 
    return arr unless i > 0 

    while --i 
     j = Math.floor(Math.random() * (i+1)) 
     [arr[i], arr[j]] = [arr[j], arr[i]] # use pattern matching to swap 
+0

奇怪返回'FALSE',而不是'在空的情況下arr'。 –

+0

@RoyJ true,改變了, –

+0

如果你想簡潔,我寧願'返回ARR,除非我> 0。 – deceze

0

您的形式,當我測試了,給了我一個意外的行爲。 這種方式適合我。

shuffle_array = (arr) -> 
i = arr.length 

while --i 
    j = Math.floor(Math.random() * (i+1)) 
    [arr[i], arr[j]] = [arr[j], arr[i]] 

return arr unless i > 0 

乾杯。

0
Array::shuffle = -> 
    [email protected] 
    i=a.length 
    while i>0 
     int=Math.floor(Math.random()*i) 
     i-- 
     o=a[i] 
     a[i]=a[int] 
     a[int]=o 
    a 

console.log([1..10].shuffle()) 
+2

你可以在你的回答中添加一些解釋嗎?即使添加一些評論將是一個開始。 – LordWilmore