Kotlin中的中位数计算

3
我编写了一个计算中位数范围的代码,但我想给每一列和每一行命名,例如:

列 A B C D
行 1 2 3

我需要计算类似Excel中的范围的中位数,如A2:C3,所以程序可以计算A2 A3 B2 B3 C2 C3,如果是B3:D3,我希望它计算B3 C3 D3
这是我的代码:
fun med(list: List<Double>) = list.sorted().let { 
    (it[it.size / 2] + it[(it.size - 1) / 2]) / 2 
}

fun main(args: Array<String>) {
    med(listOf(1.5, 2.67, 3.0, 1.4)).let { println(it) }
    med(listOf(5.2, 7.1, -4.8, 0.0)).let { println(it) }
    med(listOf(1.4, 6.0, 2.5, -1.9)).let { println(it) }
}

1
你所计算的中位数只适用于偶数长度的列表。 - leonardkraemer
那么我该如何为B3:D3或A2:C3执行此操作? - Eyad Khalil
对于奇数长度的排序列表,只需返回中间项,例如对于 1.5、2.67、3.0,中位数是 2.67 - Michael Butscher
1个回答

3

如果列表的长度是奇数,您应该检查列表的长度并返回中间元素:

fun med(list: List<Double>) = list.sorted().let {
    if (it.size % 2 == 0)
        (it[it.size / 2] + it[(it.size - 1) / 2]) / 2
    else
        it[it.size / 2]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接