我在我的结构中使用 Random 类CompareTo()
以相等的概率选择两个具有相同字段值的结构之一。Random 类使用固定种子进行实例化,以获得可重现的伪随机值序列,以确保无论我使用相同的输入运行多少次,我的程序都会给出相同的精确比较结果。
我正在考虑用内存引用或 GetHashCode() 替换随机数。这样做将保证:
(1) 以相等的概率进行选择,并且
(2) 如果我再次运行该程序,我最终会得到相同的结果吗?
struct MyStruct : IComparable<MyStruct>
{
private readonly float _param1;
private readonly float _param2;
private readonly int _randValue;
public MyStruct(float param1, float param2)
{
_param1 = param1;
_param2 = param2;
_randValue = _random.Next();
}
public int CompareTo(MyStruct other)
{
if (_param1 < other._param1)
{
return -1;
}
else if (_param1 > other._param1)
{
return 1;
}
else if (_param2 > other._param2)
{
return -1;
}
else if (_param2 < other._param2)
{
return 1;
}
// If both params are equal, then select one of the structs with
// equal probability
else if (_randValue < other._randValue)
{
return -1;
}
else if (_randValue > other._randValue)
{
return 1;
}
return 0;
}
}
谢谢 !