あなたはどのようにアクションスクリプト3を使って配列をランダム化しますか?as3ランダム配列 - ランダム化配列 - actionscript 3
答えて
のArray.sort()関数を使用して、短いバージョンがあります:
var arr : Array = [0,1,2,3,4,5,6,7,8,9];
function randomize (a : *, b : *) : int {
return (Math.random() > .5) ? 1 : -1;
}
trace(arr.sort(randomize));
あなたは "十分な" ランダム性を取得しない場合は、二回並べ替えることができます:)
EDITを - 説明行:
Array
クラスメソッドsort()
の場合、並べ替えのオプションはArray.CASEINSENSITIVE, Array.DESCENDING
などがありますが、2つのパラメータ(配列から2つの要素を比較する)を受け付ける独自のカスタム比較関数参照(コールバック)もあります。 AS3のドキュメントから:
比較関数は、比較するには2つの引数を取る必要があります。負の戻り値は、Aがソートされた順序でBの前に表示されるように指定し
- :要素AとBを考えると、compareFunctionは結果が負、0、または正の値を持つことができます。
- 戻り値0は、AとBのソート順が同じであることを示します。
- 正の戻り値は、ソートされたシーケンスでBの後にAが表示されるように指定します。
注:比較関数のパラメータは、(あなたの配列が入力されている場合)、入力された、あなたは配列をソートする必要があるときに
function compareElements (elementA : SomeClass, elementB : SomeClass) : int;
この方法は非常に便利である:例えば任意の名前を持っているかもしれませんそれらの特別な特性によって要素を分離する。ランダム化の場合、compareFunction
はランダムに-1, 0
または1
を返し、配列要素を場所(インデックス)に切り替えるようにします。私はより良いランダム化が(私の主観的で数学的にテストされていない意見で)メソッドが-1
と1
を返すだけであることを発見しました。また、カスタム比較機能doesn't compare elements sequentiallyでソート機能を使用することを覚えておいてください。そのため、いくつかの特殊なケースでは、ランダム化の結果が予想と異なる場合があります。
これは非常に役に立ちました。それがあなたにも役立つことを願っています。
// Array to Randomize
var firstArray:Array = ["One","Two","Three","Four","Five","six","seven","eight","nine","ten"];
trace(firstArray); // Prints in order
var newArray:Array = new Array();
function randomizeArray(array:Array):Array
{
var newArray:Array = new Array();
while (array.length > 0)
{
newArray.push(array.splice(Math.floor(Math.random()*array.length), 1));
}
return newArray;
}
var randomArray:Array = randomizeArray(firstArray);
trace(randomArray); // Prints out randomized :)
はまた、あなたがいることを必要とする場合は、所定の位置に配列をランダム化することを可能にするより良い方法はあり、それはあなたがあなたの元の配列の単一コピー、より多くを作成することはありません。
package
{
import flash.display.Sprite;
public class RandomizeArrayExample extends Sprite
{
public function RandomizeArrayExample()
{
super();
testDistribution();
}
private function testDistribution():void
{
var hash:Object = { };
var tester:Array = [1, 2, 3, 4];
var key:String;
for (var i:int; i < 1e5; i++)
{
randomize(tester);
key = tester.join("");
if (key in hash) hash[key]++;
else hash[key] = 1;
}
for (var p:String in hash) trace(p, "=>", hash[p]);
}
private function randomize(array:Array):Array
{
var temp:Object;
var tempOffset:int;
for (var i:int = array.length - 1; i >= 0; i--)
{
tempOffset = Math.random() * i;
temp = array[i];
array[i] = array[tempOffset];
array[tempOffset] = temp;
}
return array;
}
}
}
多くのソース配列をランダムにターゲット配列にランダムに挿入したいという別の要件がありました。 Rytisのように、配列のforEach、map、sort関数の大ファンです。
var randomInsert:Function = function callback(item:*, index:int, array:Vector.<MyItem>):void
{
var j:Number = Math.floor(Math.random() * targetArray.length);
targetArray.splice(j,0,item);
}
targetArray = new Vector.<MyItem>();
sourceArray1.forEach(randomInsert, this);
sourceArray2.forEach(randomInsert, this);
ここは簡単な機能です。
function randomizeArray(array:Array):Array
{
var newArray:Array = new Array();
while (array.length > 0)
{
var mn=Math.floor(Math.random()*array.length)
newArray[newArray.length]=array[mn]
array.splice(mn,1)
}
return newArray;
}
配列をシャッフルする必要がある場合(要素は繰り返せません)。あなたはこの機能を使用することができます:
/**
* Shuffles array into new array with no repeating elements. Simple swap algorithm is used.
*/
public function shuffleArray(original:Array):Array
{
// How many swaps we will do
// Increase this number for better results (more shuffled array, but slower performance)
const runs:int = original.length * 3;
var shuffled:Array = new Array(original.length);
var i:int;
var a:int;
var b:int;
var temp:Object;
// Copy original array to shuffled
for(i=0; i<shuffled.length; i++){
shuffled[i] = original[i];
}
// Run random swap cycle 'runs' times
for(i=0; i<runs; i++){
// There is a chance that array element will swap with itself,
// and there is always small probability it will make your shuffle
// results not that good, hence try to experiment with
// different runs count as stated above
a = Math.floor(Math.random() * original.length);
b = Math.floor(Math.random() * original.length);
// Swap messages
temp = shuffled[a];
shuffled[a] = shuffled[b];
shuffled[b] = temp;
}
return shuffled;
}
使用法:
var testArray:Array = ["Water", "Fire", "Air", "Earth"];
trace(shuffleArray(testArray).concat());
これは私が記憶ゲームのために36枚のカードの私の配列をランダム化する方法である
はconst QUANT_CARTAS: int = 36;
//get the 36 numbers into the array
for (var i: int = 0; i < QUANT_CARTAS; i++)
{
cartas.push(i);
}
//shuffles them =)
for (var moeda: int = QUANT_CARTAS - 1; moeda > 0; moeda--)
{
var pos: int = Math.floor(Math.random() * moeda);
var carta: int = cartas[moeda];
cartas[moeda] = cartas[pos];
cartas[pos] = carta;
}
// and add them using the random order...
for (i = 0; i < QUANT_CARTAS; i++)
{
var novaCarta: Carta = new Carta();
novaCarta.tipoCarta = cartas[i];
etcetcetc.............
}
配列
からランダムな文字列を選択してくださいfunction keyGenerator(len:Number):String
{
function randomRange(minNum:Number, maxNum:Number):Number
{
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}
var hexArray = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];
var key = "";
for (var i=0; i<len; i++)
{
key += hexArray[randomRange(0,hexArray.length-1)];
}
return key;
}
用途:
trace(keyGenerator(16));
- 1. PHP配列シャッフル/ランダム化配列
- 2. はランダムに配列
- 3. ランダム初期化多次元配列
- 4. 配列を2つの配列にランダム化する
- 5. PHP、キー付きランダム配列
- 6. 「ランダム」配列の操作
- 7. ランダム配列ソートの再現
- 8. ムービークリップの配列ActionScript 3
- 9. ランダム化または私は配列を持っていると言う配列
- 10. ボタンのランダム化配置
- 11. 乱数化する配列の番号ランダムを使用する
- 12. ランダムなintの配列を作る
- 13. ランダム配列のマージソートメソッドの追加
- 14. ランダムな配列から選択
- 15. 配列のランダムな背景色 - PHP
- 16. preg_replace - 配列内のランダムな単語
- 17. ランダムなテキストからjQueryの配列
- 18. PHPでイメージ配列をランダム化する方法
- 19. matlabに配列番号をランダムに配置する
- 20. 配列内の要素をランダム化していますか?
- 21. 2つの配列を同じ方法でランダム化します。
- 22. Javascript重複することなく配列値をランダム化して配列を作成しますか?
- 23. ランダム配列文字列がゼロになる
- 24. .Plist配列がランダムな文字列をUILabelに生成する
- 25. ランダムな文字列の配列を作成する[Java]
- 26. ランダムな単語の配列をハッシュタグの配列にフィルタリングする方法は?
- 27. AS3配列問題
- 28. AS3配列のベクトル
- 29. ファイルから読み込んだ行を配列にランダム化し、bashスクリプトで配列をループする方法
- 30. ランダムに配列の値を表示する方法
私は '(Math.random()<.5)と思いますか? -1:1'が良いです。 – Florent
同意し、より効率的で、ラウンドする必要はありません – BadFeelingAboutThis
これはかなり凄いです。あなたは行を分解し、彼らが何をしているのか説明できますか? (a:*、b:*)やソートなどと同じように。 –