Il serait possible d'écrire une implémentation IDictionary<TKey, TValue>
qui se comportait de cette manière, mais ce ne serait pas une bonne idée: la plupart des gens trouveraient un indexeur non déterministe pour une classe de collection très peu intuitif.
Au lieu de cela, je vous suggère à la place de la responsabilité valeur pour une clé, plutôt que le dictionnaire lui-même. Une option serait d'écrire un type personnalisé qui est capable de choisir parmi un ensemble de possibilités avec une probabilité égale. Par exemple:
public class UnbiasedRandomPicker<T>
{
private readonly Random _rand = new Random();
private readonly T[] _possibilities;
public UnbiasedRandomPicker(params T[] possibilities)
{
// argument validation omitted
_possibilities = possibilities;
}
public T GetRandomValue()
{
return _possibilities[_rand.Next(_possibilities.Length)];
}
}
Vous pouvez ensuite utiliser le dictionnaire comme celui-ci:
var dict = new Dictionary<string, UnbiasedRandomPicker<int>>
{
{"A", new UnbiasedRandomPicker<int>(15, 56)},
{"B", new UnbiasedRandomPicker<int>(25, 13)}
};
int randomValueFromA = dict["A"].GetRandomValue();
Question intéressante .. Pourriez-vous un peu? –
Lors de la recherche d'une clé, devrait-elle toujours retourner la première valeur en premier, puis la seconde ou devrait-elle être aléatoire (ce qui ne viole pas l'exigence de probabilité)? – NullUserException