| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace GFGGame
- {
- public static class RandomUtil
- {
- private static readonly Random TempRandom = new Random();
- public static T RandomList<T>(List<T> list)
- {
- var index = TempRandom.Next(list.Count);
- return list[index];
- }
- public static T RandomArr<T>(T[] arr)
- {
- var index = TempRandom.Next(arr.Length);
- return arr[index];
- }
- public static T RandomArr<T>(List<T> arr)
- {
- var index = TempRandom.Next(arr.Count);
- return arr[index];
- }
- //随机一个数 start 包含 end 包含
- public static int RandomInt(int start, int end)
- {
- return TempRandom.Next(start, end + 1);
- }
- public static int RandomNext(int count)
- {
- return TempRandom.Next(count);
- }
- public static T[] RandomN<T>(IEnumerable<T> arr, int n)
- {
- return arr.OrderBy(x => TempRandom.Next()).Take(n).ToArray();
- }
- public static T[] RandomNExtra<T>(T[] arr, T[] arr1, int n)
- {
- var list = arr.Except(arr1).ToList();
- var count = list.Count;
- var needNum = n;
- var result = new List<T>();
- while (needNum > 0 && count > 0)
- {
- var index = TempRandom.Next(count);
- result.Add(list[index]);
- list[index] = list[count - 1];
- count--;
- needNum--;
- }
- if (needNum <= 0) return result.ToArray();
- var extra = arr.Except(result).OrderBy(_ => TempRandom.Next()).Take(needNum);
- result.AddRange(extra);
- return result.ToArray();
- }
- public static int RandomNExtra(int start, int end, List<int> extra)
- {
- var list = new List<int>();
- for (var i = start; i <= end; i++)
- {
- if (extra.Contains(i)) continue;
- list.Add(i);
- }
- var count = list.Count - 1;
- var index = TempRandom.Next(count);
- return list[index];
- }
- public static List<TValue> GetRandomValues<TKey, TValue>(Dictionary<TKey, TValue> dict, int n)
- {
- return dict.Values.OrderBy(x => TempRandom.Next()).Take(n).ToList();
- }
- }
- }
|