Exemplo n.º 1
0
        public static IEnumerable <T> Shuffle <T>(this IEnumerable <T> source, RandomIntBetween rng)
        {
            Contract.Requires <ArgumentNullException>(source != null);
            Contract.Requires <ArgumentNullException>(rng != null);
            Contract.Ensures(Contract.Result <IEnumerable <T> >() != null);

            return(ShuffleIterator(source, rng));
        }
Exemplo n.º 2
0
        /// <remarks>
        ///     Adapted from LukeH's answer on StackOverflow.
        ///     http://stackoverflow.com/users/55847/
        ///     http://stackoverflow.com/a/5807238/343238
        /// </remarks>
        private static IEnumerable <T> ShuffleIterator <T>(IEnumerable <T> source, RandomIntBetween rng)
        {
            var buffer = source.ToList();

            for (var i = 0; i < buffer.Count; i++)
            {
                var j = rng(i, buffer.Count);
                yield return(buffer[j]);

                buffer[j] = buffer[i];
            }
        }
Exemplo n.º 3
0
 private static TestDelegate TestDelegate <T>(IEnumerable <T> source, RandomIntBetween rng)
 {
     return(() => Core.Extensions.ForIEnumerable.Shuffle(source, rng));
 }