mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-04 22:49:08 +01:00
29 lines
No EOL
954 B
C#
29 lines
No EOL
954 B
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace MLEM.Extensions {
|
|
public static class RandomExtensions {
|
|
|
|
public static T GetRandomEntry<T>(this Random random, params T[] entries) {
|
|
return entries[random.Next(entries.Length)];
|
|
}
|
|
|
|
public static T GetRandomEntry<T>(this Random random, IList<T> entries) {
|
|
return entries[random.Next(entries.Count)];
|
|
}
|
|
|
|
public static T GetRandomWeightedEntry<T>(this Random random, IList<T> entries, Func<T, int> weightFunc) {
|
|
var totalWeight = entries.Sum(weightFunc);
|
|
var goalWeight = random.Next(totalWeight);
|
|
var currWeight = 0;
|
|
foreach (var entry in entries) {
|
|
currWeight += weightFunc(entry);
|
|
if (currWeight >= goalWeight)
|
|
return entry;
|
|
}
|
|
throw new IndexOutOfRangeException();
|
|
}
|
|
|
|
}
|
|
} |