weightedChoice<T> method

T weightedChoice<T>(
  1. List<T> items,
  2. List<double> weights
)

Selects a random element from a list with weights.

Implementation

T weightedChoice<T>(List<T> items, List<double> weights) {
  assert(items.length == weights.length);

  final totalWeight = weights.reduce((a, b) => a + b);
  var random = _random.nextDouble() * totalWeight;

  for (int i = 0; i < items.length; i++) {
    random -= weights[i];
    if (random <= 0) {
      return items[i];
    }
  }

  return items.last;
}