我正在寻找的逻辑是,如果其中一个数字> = 0(它们不一定是),那么返回两个中的最小值也大于0.我为它编写的代码是如此丑陋,我很惭愧发布它!
编辑:样品1,-1 => 15,6 => 5 -1,-1 => 0
(如果两者都小于0,则返回0)
Jon*_*eet 14
我将尝试我的心灵力量,并假设如果两者都为零,你想要返回0.
换一种说法:
return x < 0 && y < 0 ? 0
: x < 0 ? y
: y < 0 ? x
: Math.Min(x, y);
Run Code Online (Sandbox Code Playgroud)
我相信我能做得更好......
如果它们都不大于0,那么至少有一个小于零,所以你只关心它们中的较大者,或者如果它们都小于零则为0.否则,我们只采取最低限度.
return x < 0 || y < 0 ? Math.Max(Math.Max(x, y), 0) : Math.Min(x, y);
Run Code Online (Sandbox Code Playgroud)
如果您不太关心性能,可以使用:
new[] { x, y }.Where(z => z > 0)
.DefaultIfEmpty() // Make sure there's at least one entry
.Min();
Run Code Online (Sandbox Code Playgroud)
坦率地说,这些都不是很好,IMO.我想要对他们中的任何人发表评论......
这太难看了吗?
private int GetSmallestNonNegative(int a , int b)
{
if (a >= 0 && b >= 0)
return Math.Min(a,b);
else if (a >= 0 && b < 0)
return a;
else if (a < 0 && b >= 0)
return b;
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为这很简单,可扩展到任何数字参数,并且相当好地反映了问题的原始措辞("一组数字的最小值也大于或等于0"):
new[] { a,b,0 }.Where(x => x >= 0).Min();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13075 次 |
| 最近记录: |