Kaynağa Gözat

add shuffle method

bstouls 9 yıl önce
ebeveyn
işleme
2e38ed97cd
2 değiştirilmiş dosya ile 21 ekleme ve 0 silme
  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