Ho un requisito nel mio progetto .net in cui ho bisogno di selezionare un elemento da una collezione, ogni oggetto ha un peso (intero da 1 a 10) assegnato ad esso. Ho bisogno di un generatore casuale che prenda in considerazione questo peso, cioè più alto è il peso, maggiori sono le probabilità che l'oggetto venga selezionato. Sono graditi tutti gli esempi di codice in .net, sebbene la descrizione dell'algoritmo sia piacevole.Ho bisogno dell'algoritmo casuale con opzioni di pesatura in .net
Modifica: copia/incolla il codice C# nel caso in cui qualcuno si imbatta in questo.
class RandomWeightedSelector<T>
{
private List<T> items = new List<T>();
public void Add(T item, uint weight = 1)
{
for (int i = 0; i < weight; i++)
items.Add(item);
}
public T GetRandom()
{
return items[new Random().Next(0, items.Count)];
}
}
Non si vuole essere la creazione di un nuovo caso ogni chiamata a 'GetRandom'. Il costruttore predefinito di 'Random' semina il generatore con il tempo di attività del sistema in millisecondi. Se chiami il tuo 'GetRandom' più di una volta al millisecondo, ti verrà restituito lo stesso valore. Anche se non lo fai, potresti restituire risultati che hanno una "casualità" peggiore rispetto al semplice riutilizzo di una singola istanza 'Random'. – Dolphin