Muh*_*jid 2 c# infinity visual-studio-2012
我正在为定向加权图开发权重矩阵.我必须根据权重矩阵的规则插入无穷大.

到目前为止,我坚持使用int.MaxValueC#的内置函数...之后我使用这个权重矩阵进行FloydWarshall算法,但是由于int.MaxValue,我在输出中得到了非常大的数字.我正在寻找一种可以被理解为无限的替代方案,但它并没有给出很大的价值......什么可以替代...?记得用int.
你可以使用Nullable<int>(int?简称),只是null用来表示"无限".从技术上讲,这可能会很好,但它不是你想要做的理想的语义表示.另请注意,如果使用数学运算(加法,乘法等),null值的语义可能并不总是与表示无穷大时所需的值匹配,因此在使用此类运算符时要小心,以及实际需要它们的内容当值为null /无限时执行.
您可以使用double,它支持非数字值,例如Infinity.当然,您将存储浮点值,而不是整数.这可能是也可能不是您可以在应用程序中使用的缺点,具体取决于您需要的重要数字的数量,以及您对内存/性能问题的敏感程度.
创建自己的包装整数(或可以为空的整数)的类型,但也有无穷大的表示.这基本上看起来就像Nullable,并且可能有一个非常相似的公共API,但只是使用布尔来跟踪值是否是无限的,而不是它是否有值.它基本上只是一种重命名公共API部分的方式,int?以符合您的预期用法.它可能看起来像这样:
public struct InfiniteInteger
{
private int? value;
public InfiniteInteger()
{
this.value = null;
}
public InfiniteInteger(int value)
{
this.value = value;
}
public int Value { get { return value.Value; } }
public bool IsInfinite { get { return value.HasValue; } }
//todo explicit/implicit conversion operators as you see fit
//todo override math operators (+, -, *, %, etc.) as you see fit
//todo override equality/comparison operators;
// these can just be passed down directly to the wrapped value's implementation
}
Run Code Online (Sandbox Code Playgroud)请注意,在执行不同的运算符而不是处理可空值时,您可能希望以不同的方式处理无限值,或者您可能不会,这取决于您正在执行的操作,因此只需花一些时间来考虑应该发生什么.