/// <summary> /// Aplicamos el algoritmo para mezcla de Fisher-Yates /// </summary> /// <param name="argElems">Argument elems.</param> /// <param name="argRandom">Argument random.</param> /// <typeparam name="T">The 1st type parameter.</typeparam> public static IEnumerable <T> Shuffle <T>(this IEnumerable <T> argElems, IRandomInt argRandom = null) { var pShuffled = argElems.ToArray(); var pRandom = argRandom ?? RandomDefault.GetRandomByVelocityMax(pShuffled.Length); for (int pIdx = pShuffled.Length - 1; pIdx > 0; pIdx--) { int pIdxSwap = pRandom.Next(pIdx); Swap(ref pShuffled [pIdx], ref pShuffled [pIdxSwap]); } return(pShuffled.ToArray()); }
public static int Next(this IRandomInt argRandom, int argMin, int argMax) { return(argMin + argRandom.Next(argMax - argMin)); }