0

これは、配列の中央値を計算するためのソリューションです。最初の 3 行はわかりますが、3 行目で魔法が起こっています。「ソートされた」変数がどのように使用されているか、なぜそれが括弧の隣にあるのか、そして他の変数「len」がそれらの括弧と括弧で囲まれている理由を誰かが説明できますか? sorted が突然配列として使用されているようなものですか?ありがとう!

  def median(array)
    sorted = array.sort
    len = sorted.length
    return ((sorted[(len - 1) / 2] + sorted[len / 2]) / 2.0).to_f
  end

  puts median([3,2,3,8,91])
  puts median([2,8,3,11,-5])
  puts median([4,3,8,11])
4

3 に答える 3

1

Yes, array.sort is returning an array and it is assigned to sorted. You can then access it via array indices.

If you have an odd number of elements, say 5 elements as in the example, the indices come out to be:

(len-1)/2=(5-1)/2=2

len/2=5/2=2 --- (remember this is integer division, so the decimal gets truncated)

So you take the value at index 2 and add them, and then divide by 2, which is the same as the value at index 2.

If you have an even number of elements, say 4,

(len-1)/2=(4-1)/2=1 --- (remember this is integer division, so the decimal gets truncated)

len/2=4/2=2

So in this case, you are effectively averaging the two middle elements 1 and 2, which is the definition of median for when you have an even number of elements.

于 2013-05-21T06:58:46.453 に答える