c# - 将带有句点的对象列表组合成唯一列表

标签 c# linq recursion tree

我有一个对象列表。每个对象的 ID 与时间段(FromDate 和 ToDate)相结合都是唯一的。

该列表可能如下所示(现实生活中还有更多属性):

ID;从日期;迄今为止
1; 2000年1月1日; 2019-12-31
2; 2000年1月1日; 2019-12-31
3; 2000年1月1日; 2009-12-31
3; 2010年1月1日; 2019-12-31
4; 2000年1月1日; 2019-12-31
5; 2000年1月1日; 2014-12-31
5; 2015年1月1日; 2019-12-31

注意:

  • 对象 id=3 和 id=5 都有两个化身(句点)
  • 可以假设 ID 的周期内没有间隙。
  • 列表始终按所示顺序排列

我想要的是几个对象列表,每个对象都有一个唯一的句点,每个 id 仅包含一个:

列表1:
期间=2000年1月1日至2009年12月31日
对象列表:1;2;3(第一个周期);4;5(第一个周期)

列表2:
期间=2010年1月1日至2014年12月31日
对象列表:1;2;3(第二期);4;5(第一期)

列表3:
期间=2015年1月1日至2019年12月31日
对象列表:1;2;3(第二期);4;5(第二期)

我很确定这里需要一些递归计算,但除此之外,我都是问号。请帮忙!!!如果需要更多信息,请给我写信。

问候, 莫滕:o)

最佳答案

我首先通过按升序对唯一的开始/结束日期进行排序,从开始日期和结束日期创建唯一的日期范围。由于日期是完整的,这应该是一个连续的列表。

然后,我将根据列表的顺序选择列表中的每“对”连续日期,并将其用作新的期间。因此,第一个期间将是日期 0 和日期 1,第二个期间将是日期 2 和 3,然后是日期 4 和 5 等等 然后我会将与该日期范围相交的每个项目添加到该范围内的对象列表中。

因此根据您的数据列表将是:

2000年1月1日
2009-12-31
2010年1月1日
2014-12-31
2015年1月1日
2019-12-31

那么您的组将是:

2000-1-1 至 2009-12-31 对象 1,2,3(第一个),4,5(第一个)
2010年1月1日至2014年12月31日对象1,2,3(第二),4,5(第一)
2015年1月1日至2019年12月31日对象1,2,3(第二),4,5(第二)

这是假设您最初所需的结果不正确。

编辑

最初所需的结果不正确,但现在与此方法应实现的结果一致

关于c# - 将带有句点的对象列表组合成唯一列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5566006/

相关文章:

c# - 哪个是更好的 linq 查询? .Where(crit).FirstOrDefault() 或 .Where(someCrit).FirstOrDefault(someOtherCrit)?

c# - 转义转义符不起作用——SQL LIKE 运算符

c# - WPF 使用数据库处理点击事件

c# - NAnt 扩展函数,项目对象

c# - 如何将 HTML 解码为字符串?

c# - 如何在 LINQ 中构造动态查询?

javascript - 创建所有 N 位数字的数组,其数字之和等于 S

Java双参数递归

java - 使用递归删除链表中第一次出现的元素以及所有出现的元素

c# - 我怎样才能得到我的应用程序的父进程的PID