randWeightedPick<T> static method

T randWeightedPick<T>(
  1. List<T> arr,
  2. List<double> weights
)

Implementation

static T randWeightedPick<T>(List<T> arr, List<double> weights) {
  final total = weights.reduce((a, b) => a + b);
  var roll = _rnd.nextDouble() * total;

  for (var i = 0; i < arr.length; i++) {
    roll -= weights[i];
    if (roll <= 0) return arr[i];
  }

  return arr.last;
}