我有一个从csv文件生成的客户对象数组:
日期,名称,销售额
03/01,Alpha,110
03/23,Alpha,25
01/02,Beta,135
...
并且需要一种有效的方法来创建具有中位销售额的新的独特客户数组,并将它们导出回csv。可能有多达500,000条记录和100,000个独特客户!
答案 0 :(得分:2)
- 将您的源数据分成每个客户的集合。
对于每位客户:
- 按销售额排序
- 如果记录计数为奇数,则返回中间索引处的销售额
- 如果记录计数是偶数,则返回中间任一侧的平均记录
- 将返回的记录放入结果数组中。
答案 1 :(得分:0)
在这种情况下,我会使用:
Dictionary<string, List<int>> dict;
密钥是客户名称(假设它们是唯一的,否则分配某种类型的唯一ID?)
值是每个客户的销售清单。在你填充这个数组之后,你可以在排序和获取中间元素(如上所述)或者求和并除以元素数量来获得中位数。(这是错误的)
排序(使用比较的方法)需要O(nlog n)时间,其中n是要排序的列表的长度。
有选择算法可以返回O(n)中的第k个最小值,查看下面的维基百科链接