public K GetWeightedRandom() { lock ( Wheel ) { var pos = 0f; var target = BufUtils.RandomFloat(TotalSpaceSum); foreach (var one in Wheel) { pos += one.Space; if (pos >= target) { RandomFitEMA = (49 * RandomFitEMA + one.Space + MinFit - 1) / 50f; DebugUtils.LogDebug(() => "Roulette: " + one.Id.ToString()); return(one.Id); } } return(Wheel[BufUtils.RandomInt(Wheel.Count)].Id); } }
public static KeyValuePair <K, V> Random <K, V>(this IDictionary <K, V> dic) { return(dic.Skip(BufUtils.RandomInt(dic.Keys.Count - 1)) .Take(1).FirstOrDefault()); }
public static V RandomValue <K, V>(this IDictionary <K, V> dic) { return(dic[dic.Keys.Skip(BufUtils.RandomInt(dic.Keys.Count - 1)) .Take(1).FirstOrDefault()]); }