private void Awake() { List <int> list = new List <int>() { 8, 3, -2, 39, 1290, 199, -29, 55, 1, 0 }; Pcg randomizer = new Pcg(); list.Shuffle(randomizer); StringBuilder builder = new StringBuilder(); builder.Append("Output:"); foreach (int item in list) { builder.Append('\n').Append(item.ToString()); } Debug.Log(builder.ToString()); /* Should always be in this order after the shuffle * * -29, 3, -2, 199, 55, 8, 0, 1, 39, 1290 */ Assert.AreEqual(-29, list[0]); Assert.AreEqual(3, list[1]); Assert.AreEqual(-2, list[2]); Assert.AreEqual(199, list[3]); Assert.AreEqual(55, list[4]); Assert.AreEqual(8, list[5]); Assert.AreEqual(0, list[6]); Assert.AreEqual(1, list[7]); Assert.AreEqual(39, list[8]); Assert.AreEqual(1290, list[9]); }
public static T Choose <T>(this T[] array, Pcg randomizer) { if (randomizer == null) { throw new ArgumentNullException(nameof(randomizer)); } if (array.Length == 0) { throw new InvalidOperationException("Given Array has a length of zero, so no element can be returned."); } return(array[Convert.ToInt32(randomizer.Range32(Convert.ToUInt32(array.Length)))]); }
public static T Choose <T>(this IList <T> list, Pcg randomizer) { if (randomizer == null) { throw new ArgumentNullException(nameof(randomizer)); } if (list.Count == 0) { throw new InvalidOperationException("Given IList contains no elements, so no element can be returned."); } return(list[Convert.ToInt32(randomizer.Range32(Convert.ToUInt32(list.Count)))]); }
public static T Take <T>(this IList <T> list, Pcg randomizer) { if (randomizer == null) { throw new ArgumentNullException(nameof(randomizer)); } if (list.Count == 0) { throw new InvalidOperationException("Given IList contains no elements, so no element can be returned."); } T item = Choose(list, randomizer); list.Remove(item); return(item); }
public static void Shuffle <T>(this T[] array, Pcg randomizer) { if (randomizer == null) { throw new ArgumentNullException(nameof(randomizer)); } int n = array.Length; while (n > 0) { int rand = Convert.ToInt32(randomizer.Range32(Convert.ToUInt32(n--))); T item = array[rand]; array[rand] = array[n]; array[n] = item; } }
public static void Shuffle <T>(this IList <T> list, Pcg randomizer) { if (randomizer == null) { throw new ArgumentNullException(nameof(randomizer)); } int n = list.Count; while (n > 0) { int rand = Convert.ToInt32(randomizer.Range32(Convert.ToUInt32(n--))); T item = list[rand]; list[rand] = list[n]; list[n] = item; } }