Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static IEnumerable<T> GetItems<T>(IEnumerable<Queue<T>> queues)
- {
- int remaining = queues.Sum(q => q.Count);
- Random rand = new Random();
- while (remaining > 0)
- {
- int index = rand.Next(remaining);
- foreach (Queue<T> q in queues)
- {
- if (index < q.Count)
- {
- yield return q.Dequeue();
- remaining--;
- break;
- }
- else
- {
- index -= q.Count;
- }
- }
- }
- }
- int remaining = 0;
- foreach(Queue<T> q in queues) {remaining += q.Count;}
- static void Main()
- {
- List<Queue<int>> queues = new List<Queue<int>> {
- Build(1,2,3,4,5), Build(6,7,8), Build(9,10,11,12,13)
- };
- foreach (int i in GetItems(queues))
- {
- Console.WriteLine(i);
- }
- }
- static Queue<T> Build<T>(params T[] items)
- {
- Queue<T> queue = new Queue<T>();
- foreach (T item in items)
- {
- queue.Enqueue(item);
- }
- return queue;
- }
- private Random random = new Random();
- public int RandomSort(Queue q1, Queue q2)
- {
- if (q1 == q2) { return 0; }
- return random.Next().CompareTo(random.Next());
- }
Add Comment
Please, Sign In to add comment