タグ

ブックマーク / miya2000.hatenadiary.org (1)

  • 配列からn個の要素を重複無しでランダムに取り出す - m2

    真っ先に思いついたのはコレ。 function random(array, num) { var a = array.concat(); // clone. var r = []; var l = array.length; var n = Math.min(num, array.length); while(n-- > 0) { var i = Math.floor(Math.random() * l--); r.push(a[i]); a.splice(i, 1); } return r; } ランダムに1個取り出して、元の配列からそれを削除していくことで重複を避けるものです。 実際に使う分にはこれで全く問題ないと思うんですが、扱う数が大きくなってくると splice がボトルネックになってきます(LinkedListではないですからね)。 そこで、こう書き換えてみました。 funct

    配列からn個の要素を重複無しでランダムに取り出す - m2
  • 1