我有这样的收藏:
[[patient1,value1], [patient2,value2]]
例如。
x = [[1, 20.28], [1, 11.11], [2, 4.60], [2, 3.68]]
我countBy
经常这样获取每个患者的计数:
def counts = x.countBy{patient, value -> patient}
我试图获得每位患者的总和,但是没有运气:
def sums = x.groupBy({patient, value -> patient }).collectEntries{p, v -> p:v.sum()}
有什么我想念的吗?
注意:这里的总体目标是获取我使用的患者平均值:
def avgs = sums.collect{patient, value -> (value / counts[patient]) }
谢谢!
在groupBy方法中,闭包标识要分组的对象,列表条目将在分组值下归档:
x.groupBy { it[0] } // map entries by first entry in list (patient number)
评估为
[1:[[1, 20.28], [1, 11.11]], 2:[[2, 4.60], [2, 3.68]]]
考虑到collectEntries的每个输入都有一个键的患者编号和一个值的该键对的列表,collectEntries方法指定使每个映射条目看起来像什么。所以
x.groupBy {it[0]}.collectEntries {[(it.key): it.value.sum {it[1]}]}
评估为
[1:31.39, 2:8.28]
每个病人的平均数是
x.groupBy {it[0]}.collectEntries {[(it.key): it.value.sum {it[1]}/it.value.size()]}
评估 [1:15.695, 2:4.14]
对于平均值的平均值:
def avgs = [1:15.695, 2:4.14]
def averageOfAverages = avgs.entrySet().sum {it.value} / avgs.size()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句