Performance 如何在结构上执行分组操作

Performance 如何在结构上执行分组操作,performance,linq,go,optimization,nested-loops,Performance,Linq,Go,Optimization,Nested Loops,我有一个如下的结构 type resources struct { Id int Start string End string Resource map[string][]string } 我在struct[]资源中的数据如下所示 1, "2020-04-27T05:30:00","2020-04-27T06:30:00", "{"room":["101","102"], equipments: ["stethescope"]}" 2, "2020-04-27T05:

我有一个如下的结构

type resources struct {
   Id int
   Start string
   End string
   Resource map[string][]string
}
我在struct[]资源中的数据如下所示

1, "2020-04-27T05:30:00","2020-04-27T06:30:00", "{"room":["101","102"], equipments: ["stethescope"]}"
2, "2020-04-27T05:30:00","2020-04-27T06:30:00", "{"room":["102"], equipments: ["thermometer"]}"
现在,我需要根据开始和结束时间分组,以获得所需的输出,如下所示

"{"room":["101","102"], equipments: ["stethescope","thermometer"]}"

我通过创建for循环实现了这一点,但在处理较大数据时,这听起来很昂贵。有没有其他有效的方法可以在没有循环的情况下实现这一点?我检查了这一点,以便为我的场景实现LINQ。无法为我的结构类型创建它

您可以先按开始时间对资源数组进行排序。通过二进制搜索按开始日期查找所需条目的方法是数组大小的O(ln base 2)。请参见您指定的库中位于

的排序包示例,它们也在使用循环进行比较..是。谢谢我需要知道,除了LINQ之外,是否有一种有效的方法可以避免嵌套循环和临时提高性能。不,你不能避免使用循环来对数据进行分组。如果它是一个结构数组,那么唯一的方法就是迭代和比较..“在开始日期前找到你需要的条目”不是目标。排序没有任何帮助,除了非常特定的聚合函数(但set union不是其中之一),而且只有在聚合多次发生时(因为排序本身比O(n)差)。如果数组按开始日期排序,则按日期分组等操作将更有效。你是对的,我应该提到排序可能是O(n ln(n)),但你只需进行一次排序,然后就可以根据排序后的数组进行多个查询。你仍然需要访问列表中的每个条目,将其提供给聚合器,排序与否是不相关的(同样,也有一些例外情况,如查找极值):如果它已排序,聚合器可以流式传输其数据,而无需存储整个集合。