c# - 返回特定键的任何值的二值字典

标签 c# dictionary probability

我需要创建一个字典,每个键有 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/

相关文章:

c# - 为什么 Task<TResult>.Result 在这种情况下不起作用?

c# - 将带点的字符串转换为带欧元的货币,

C++ 计算事件的概率

c# - 将多个属性插入 XML 元素。联机SQL

python - MySQL 错误 - 错误 1054 : Unknown column in 'where clause'

python - 过滤字典中常见的子字典键

python - 简明的 Ruby 哈希等同于 Python dict.get()

algorithm - 随机比较排序

machine-learning - 概率和似然性之间的区别

c# - AES/GCM (AES-128-GCM) 身份验证标签在 C# 和 Ruby 中不同