Re: [問題] 陣列元素之重新排列
※ 引述《ginnz (go)》之銘言:
: 設陣列arr1中有n個為一的元素 其他為零
: 如何將原來值為一的元素 亂數替換成 值為1~n 且不重複的元素呢?
: ex: arr1=[1,1,0,1,0]
: => brr1=[2,3,0,1,0]
: or arr1=[0,1,1,1,1]
: =>brr1=[0,4,2,1,3]
: 感謝!
// 沿用命名方式XD
// 已知: arr1, n
var brr1:Array = arr1.slice (); // 拷貝一份arr1到brr1
var i:uint;
var arrPool:Array = new Array ();
for (i = 1; i <= n; i++) { // 先建一個固定內容的亂數池 (1~n)
arrPool.push (i);
}
var numBrr1:uint = brr1.length;
for (i = 0; i < numBrr1; i++) {
if (brr1 [i] == 1) {
// 從亂數池中剩下的數字隨機擇一
var selectedId:uint = Math.random () * arrPool.length;
brr1 [i] = arrPool [selectedId];
arrPool.splice (selectedId, 1); // 被選走的就刪掉(length會減一)
}
}
剛好手邊沒有flash編譯軟體 只是先打起來放
所以不能確定有沒有bug 但是意思應該沒有錯吧~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.123.103.228
討論串 (同標題文章)