Пример #1
0
        /// <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));
 }