public void WriteSelected() { WeightedItem selectedItem = GetItem(); if (selectedItem != null) { Console.WriteLine(selectedItem.Text + ": " + selectedItem.Weight); } else { Console.WriteLine("All items have 0 probability of getting selected"); } }
public WeightedItem GetItem() { int totalWeight = items.Sum(x => x.Weight); Random rnd = new Random((int)DateTime.Now.Ticks); int random = rnd.Next(0, totalWeight); WeightedItem selected = null; foreach (var item in items) { if (random < item.Weight && item.Weight > 0) { //need a new item and not a reference to get the right weights selected = new WeightedItem(item.Text, item.Weight); //decrease item's weight item.Weight -= _decreaseIncrement; break; } random -= item.Weight; } return(selected); }