[英]How optimize function of counting fractions?
我编写了一个从3个元素(整数,分子和分母)中获取一个数组的函数。 它计算出错误的分数到正常值(分子>分母)。
如何优化此功能? 我知道我进行了很多验证,但是功能看起来很丑。
function calculate_measurement(array $m): array
{
if (isset($m[NUMERATOR]) && isset($m[DENOMINATOR])) {
while (intval($m[NUMERATOR]) >= intval($m[DENOMINATOR])) {
$m[NUMERATOR] -= $m[DENOMINATOR];
if (!isset($m[INTEGER])) {
$m[INTEGER] = 0;
}
++$m[INTEGER];
}
if (0 === $m[NUMERATOR]) {
$m[NUMERATOR] = null;
$m[DENOMINATOR] = null;
}
}
return $m;
}
至少,您可以这样重写函数:
function calculate_measurement(array $m): array
{
if (!isset($m[INTEGER])) {
$m[INTEGER] = 0;
}
if (!isset($m[NUMERATOR]) || !isset($m[DENOMINATOR])) {
return $m;
}
while (intval($m[NUMERATOR]) >= intval($m[DENOMINATOR])) {
$m[NUMERATOR] -= $m[DENOMINATOR];
++$m[INTEGER];
}
if (0 === $m[NUMERATOR]) {
$m[NUMERATOR] = null;
$m[DENOMINATOR] = null;
}
return $m;
}
我不了解intval()的用法。 分子/分母可以不是整数吗? 我宁愿看到这样的功能:
function calculate_measurement(int $i, int $numerator, int $denominator) : array
{
while($numerator >= $denominator) {
$numerator -= $denominator;
++$i;
}
if(0 === $numerator) {
$numerator = $denominator = null;
}
return [
INTEGER => $i,
NUMERATOR => $numerator,
DENOMINATOR => $denominator
];
}
function calculate_measuremenet_arr(array $m): array
{
if (!isset($m[NUMERATOR]) || !isset($m[DENOMINATOR])) {
return $m;
}
return calculate_measurement(
$m[INTEGER] ?? 0,
intval($m[NUMERATOR]),
intval($m[DENOMINATOR])
);
}
不需要循环,只需计算整数和新的分子即可。 这样的事情应该做到:
function calculate_measurement(array $m): array {
if (!isset($m[NUMERATOR]) || !isset($m[DENOMINATOR])) {
return $m;
}
$m[INTEGER] = intval($m[NUMERATOR] / $m[DENOMINATOR]);
$m[NUMERATOR] -= ($m[INTEGER] * $m[DENOMINATOR]);
if ($m[NUMERATOR] === 0) {
$m[NUMERATOR] = null;
$m[DENOMINATOR] = null;
}
return $m;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.