using System.Collections.Generic; using System.Linq; using UnityEngine; namespace AibisDream.Framework { public class MultipleSelector : IMultipleSelector { private readonly List _items; private int _batchSize; public MultipleSelector(IEnumerable items, int batchSize) { _items = new List(items); _batchSize = batchSize; } public T[] Select() { int[] indexArray = IMultipleSelector.MultiRange(0, Count - 1, _batchSize); return indexArray.Select(index => _items[index]).ToArray(); } public void RemoveItem(T item) { _items.Remove(item); } public void AddItem(T item) { _items.Add(item); } public void SetBatchSize(int batchSize) { _batchSize = batchSize; } public int Count => _items.Count; } public interface IMultipleSelector { T[] Select(); void RemoveItem(T item); void AddItem(T item); int Count { get; } static int[] MultiRange(int start, int end, int batchSize) { // 确保要求的数量不超过范围 if (batchSize > end - start + 1) { Debug.LogError("要求的数量超过了范围内的数字总数"); return default; } var uniqueNumbers = new HashSet(); while (uniqueNumbers.Count < batchSize) { var number = Random.Range(start, end + 1); uniqueNumbers.Add(number); } return uniqueNumbers.ToArray(); } } }