带有条件的AS3单线程

时间:2012-05-24 10:13:11

标签: actionscript-3 math median

我如何制作一条也有条件的单线回程线?例如,如果我想做一个'返回中位数':

//assuming sorted input array
return ((inputArray.length % 2) && (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2) || inputArray[int(inputArray.length/2)+1];

有没有让这项工作?

3 个答案:

答案 0 :(得分:3)

您应该使用三元运算符:

return (inputArray.length % 2 != 0) ? (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2 : inputArray[int(inputArray.length/2)+1];

相当于:

if (inputArray.length % 2 != 0) {
    return (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2;
} else {
    return inputArray[int(inputArray.length/2)+1];
}

如果您只想使用&&||,则可以使用以下内容(这不是一个很好的编程风格):

((inputArray.length % 2 != 0) || return inputArray[int(inputArray.length/2)+1]) && return (inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]);

相当于:

(condition || return value2) && return value1;

所以,感谢short-circuit evaluation布尔运算符:

  • 如果conditiontrue,则不评估return value2并执行return value1
  • 如果conditionfalse,则会评估return value2

答案 1 :(得分:1)

我会选择一个更具可读性的版本而不重复,但有一些变量。

var index:int = int(inputArray.length / 2);
var item1:Number = inputArray[index];
var item2:Number = inputArray[index + 1];
var median:Number = (item1 + item2) / 2;

return (inputArray.length % 2 != 0) ? median : item2;

答案 2 :(得分:0)

请尝试修改条件:

return ((inputArray.length % 2) && (((inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2) || inputArray[int(inputArray.length/2)+1]));