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

&&とだけを使用したい場合||は、次のものを使用できます(これは実際には良いプログラミングスタイルではありません)。

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

したがって、ブール演算子の短絡評価のおかげで:

  • の場合、conditionは評価されず、実行されます。truereturn value2return value1
  • の場合、conditionが評価されます。falsereturn value2
于 2012-05-24T10:27:32.657 に答える
1

I would go for a more readable version without repetitions, but with some variables.

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 に答える