我正在开发一个应用程序,用于计算在指定时间段 (Term) 内获得的产品共享。
计算完成后,我有必要根据预定义的审查期限将数据汇总到组中(例如,如果获得 100% 产品所有权所需的时间是 25 年,审查期限值为 5 年,我将为该协议(protocol)提供 5 组数据聚合)。
我通过遍历我的计算结果集来执行聚合,如图所示:
if (Year% ReviewPeriod == 0)
{
// Perform Aggregations
}
这在大多数情况下都能正常工作。 然而,我确实有很多情况,产品在期限结束前达到 100% 的所有权。
我需要能够做的是聚合基于 ReviewPeriod 变量执行的计算,但如果计算中的最终值数不等于审查期,则根据剩余的项目数聚合项目.
例如,给定一个 22 年的任期,数据将根据 Review Period 变量进行汇总,但是如果有余数,则应根据余数的值对余数进行汇总。
实例
第 0 - 5 = 5 年的聚合
6 年级 - 10 年级 = 5 次聚合
11 - 15 年级 = 5 次聚合
16 - 20 年 = 5 次聚合
21 - 22 年 = 2 次聚合
谁能帮我理解聚合数据的逻辑,正如我所描述的那样。
最佳答案
可能最简单的方法是这样的:
for ( int year = 0; year <= max_year; year++ ) {
if ( year % reviewPeriod == 0 ) {
// start a new aggregation
}
// add year to current aggregation
}
您可以保留一个聚合列表,并在每个周期开始时添加一个新列表。
这是一个工作示例,它只是将年份分组在列表中:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Aggregations
{
class Program
{
static void Main(string[] args)
{
int maxYear = 22;
int period = 5;
int year = 1985;
List<List<int>> aggregations = new List<List<int>>();
int i = -1;
for (int y = 0; y <= maxYear; y++)
{
if (y % period == 0)
{
aggregations.Add(new List<int>());
i++;
}
aggregations.ElementAt(i).Add(year);
year++;
}
foreach ( List<int> l in aggregations )
{
foreach (int yy in l)
{
Console.Write(yy + " ");
}
Console.WriteLine();
}
}
}
}
关于c# - 随时间变化的数据聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12402411/