I have a requirement in my .NET project where I need to select an item from a collection, each item has a Weight (integer from 1 to 10) assigned to it.
I need a random g
Make a list and insert each item in Weight number of times. Then choose a random item from the list.
What you're looking for is called the Weighted Selector algorithm. I actually created an open source C# project for this some time ago!
It's very easy to use and efficient. Also, the documentation should get you going with no problem.
Here are a few links:
Here's an algorithm which doesn't require adding the items multiple times to a list. It can also work with non-integer weights, although if you're using NextDouble from System.Random, you'll have to scale all of the weights to add up to 1, or multiply the value from NextDouble with S to get it in the desired range.
Given a list L of items (I,W), where I is the item and W is the weight: