using System; using System.Collections.Generic; namespace Masuit.Tools.RandomSelector; /// /// 多选器 /// /// internal class MultipleSelector : SelectorBase { internal MultipleSelector(WeightedSelector weightedSelector) : base(weightedSelector) { } internal IEnumerable Select(int count) { Validate(ref count); var items = new List>(WeightedSelector.Items); int result = 0; do { var item = WeightedSelector.Option.AllowDuplicate ? BinarySelect(items) : LinearSelect(items); yield return item.Value; result++; if (!WeightedSelector.Option.AllowDuplicate) { items.Remove(item); } } while (result < count); } private void Validate(ref int count) { if (count <= 0) { throw new InvalidOperationException("筛选个数必须大于0"); } var items = WeightedSelector.Items; if (items.Count == 0) { count = 0; return; } if (!WeightedSelector.Option.AllowDuplicate && items.Count < count) { count = items.Count; } } }