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(List list) { var index = TempRandom.Next(list.Count); return list[index]; } public static T RandomArr(T[] arr) { var index = TempRandom.Next(arr.Length); return arr[index]; } public static T RandomArr(List 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(IEnumerable arr, int n) { return arr.OrderBy(x => TempRandom.Next()).Take(n).ToArray(); } public static T[] RandomNExtra(T[] arr, T[] arr1, int n) { var list = arr.Except(arr1).ToList(); var count = list.Count; var needNum = n; var result = new List(); 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 extra) { var list = new List(); 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 GetRandomValues(Dictionary dict, int n) { return dict.Values.OrderBy(x => TempRandom.Next()).Take(n).ToList(); } } }