構造体で Random クラスを使用して、CompareTo()
両方のフィールド値が同じ場合、構造体の 1 つを同じ確率で選択しています。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;
}
}
ありがとう !