瀏覽代碼

add shuffle method

bstouls 9 年之前
父節點
當前提交
2e38ed97cd
共有 2 個文件被更改,包括 21 次插入0 次删除
  1. 10 0
      hxd/Math.hx
  2. 11 0
      hxd/Rand.hx

+ 10 - 0
hxd/Math.hx

@@ -189,6 +189,16 @@ class Math {
 		return if( da > -max && da < max ) b else a + (da < 0 ? -max : max);
 	}
 
+	public static inline function shuffle<T>( a : Array<T> ) {
+		var len = a.length;
+		for( i in 0...len ) {
+			var x = Std.random(len);
+			var y = Std.random(len);
+			var tmp = a[x];
+			a[x] = a[y];
+			a[y] = tmp;
+		}
+	}
 
 	public inline static function random( max = 1.0 ) {
 		return std.Math.random() * max;

+ 11 - 0
hxd/Rand.hx

@@ -42,6 +42,17 @@ class Rand {
 		return uint() % n;
 	}
 
+	public inline function shuffle<T>( a : Array<T> ) {
+		var len = a.length;
+		for( i in 0...len ) {
+			var x = random(len);
+			var y = random(len);
+			var tmp = a[x];
+			a[x] = a[y];
+			a[y] = tmp;
+		}
+	}
+
 	public inline function rand() {
 		// we can't use a divider > 16807 or else two consecutive seeds
 		// might generate a similar float