public ProbabilityObjectCollection(IEnumerable <IProbabilityObject> items) { if (items == null) { throw new ArgumentNullException(nameof(items)); } ProbabilityCollection = new ProbabilityCollection <T>( items.Select(i => new KeyValuePair <T, decimal?>((T)i, i?.Probability))); }
public ProbabilityObjectCollection(ProbabilityObjectWrapper <T>[] items) { if (items == null) { throw new ArgumentNullException(nameof(items)); } ProbabilityCollection = new ProbabilityCollection <T>( items.Select(i => new KeyValuePair <T, decimal?>(i.Value, i.Probability))); }
// just wrapper for WeightedRandom method with ProbabilityCollection public static T ProbabilityRandom <T>(this Randomizer randomizer, ProbabilityCollection <T> probabilities) { // need null checks?? if (!probabilities.HasDefinedProbabilities) { return(randomizer.ListItem(probabilities.AsList.ToList())); } var itemsWithProbs = probabilities.GetItemsWithProbabilities(true).ToArray(); var items = itemsWithProbs.Select(i => i.Key).ToArray(); var weights = itemsWithProbs.Select(i => (float)i.Value).ToArray(); return(randomizer.WeightedRandom(items, weights)); }
public static T ProbabilityRandomIfAny <T>(this Randomizer randomizer, ProbabilityCollection <T> probabilities) { if (probabilities.IsNullOrEmpty()) { return(default);