コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: BufUtils.cs プロジェクト: itfenom/i2p-cs
 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());
 }
コード例 #3
0
ファイル: BufUtils.cs プロジェクト: itfenom/i2p-cs
 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()]);
 }