static public void RandomShuffle <T>(IList <T> list, RandomShuffleFunc func) { RandomShuffle(IteratorUtil.Begin(list), IteratorUtil.End(list), func); }
static public void RandomShuffle <T>(RandomAccessIterator <T> begin, RandomAccessIterator <T> end, RandomShuffleFunc func) { if (begin.Equals(end)) { return; } begin = IteratorUtil.Clone(begin); for (RandomAccessIterator <T> iter = IteratorUtil.AdvanceCopy(begin, 1); !iter.Equals(end); iter.MoveNext()) { begin.Position = func(iter.Position + 1); IteratorUtil.Swap(iter, begin); } }