我如何制作一条也有条件的单线回程线?例如,如果我想做一个'返回中位数':
//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];
有没有让这项工作?
答案 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布尔运算符:
condition
为true
,则不评估return value2
并执行return value1
。condition
为false
,则会评估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]));