gpt4 book ai didi

groovy - 如何在 Groovy 中同时使用 GroupBy 和 Sum?

转载 作者:行者123 更新时间:2023-12-02 09:44:44 24 4
gpt4 key购买 nike

我有一个这样的集合:

[[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()

关于groovy - 如何在 Groovy 中同时使用 GroupBy 和 Sum?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34404373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com