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