我需要创建一个字典,每个键有 2 个值,并且它必须以相同的概率返回 2 个值之一。
例子:
myDicry
{
key = "A", value1=15, value2=56;
}
int firstCall = myDicry["A"]; // = 15
int secondCall = myDicry["A"]; // = 56
最佳答案
可以写一个 IDictionary<TKey, TValue>
以这种方式运行的实现,但这不是一个好主意:大多数人会发现集合类的非确定性索引器非常不直观。
相反,我建议您将此作为键的值 的责任,而不是字典本身。一个选择是编写一个自定义类型,它能够以相等的概率从一组可能性中进行选择。例如:
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)];
}
}
然后你可以像这样使用字典:
var dict = new Dictionary<string, UnbiasedRandomPicker<int>>
{
{"A", new UnbiasedRandomPicker<int>(15, 56)},
{"B", new UnbiasedRandomPicker<int>(25, 13)}
};
int randomValueFromA = dict["A"].GetRandomValue();
关于c# - 返回特定键的任何值的二值字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3799069/