Weighted select
Allows you to store random items with their weight and select them later based on weights.
Usage
require 'weighted-select'
# a/b/c/d relate as 10/4/1/16
weights = { a: 10, b: 4, c: 1, d: 16 }
selector = WeightedSelect::Selector.new weights
# One can add some more items later
selector.add :e, 5
selector.add :f, 3
# One can increase weight by adding the same item again
selector.add :c, 4
selector.weights
# {
# (0...10) => :a,
# (10...14) => :b,
# (14...15) => :c,
# (15...31) => :d,
# (31...36) => :e,
# (36...39) => :f,
# (39...43) => :c
# }
# Returns random item based on weights
selector.select
Anything can be an item. Weight must be positive integer.
Total weight of all items is stored in selector.total_weight
.