1

我怎样才能制作一个也有条件的单行返回线?例如,如果我想做一个“返回中位数”:

//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];

有没有办法使这项工作?

4

3 回答 3

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];
}

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

((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;

因此,由于布尔运算符的短路评估:

  • 如果conditiontrue,return value2不会被评估并且return value1会被执行。
  • 如果conditionfalsereturn value2将被评估。
于 2012-05-24T10:27:32.657 回答
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;
于 2012-05-24T13:52:41.230 回答
0

请尝试修改条件:

return ((inputArray.length % 2) && (((inputArray[int(inputArray.length/2)] + inputArray[int(inputArray.length/2)+1]) / 2) || inputArray[int(inputArray.length/2)+1]));
于 2012-05-24T10:19:54.163 回答