【问题标题】:Group array items by dates按日期对数组项进行分组
【发布时间】:2015-06-26 22:13:29
【问题描述】:

假设我有一个这样的对象列表

list <type>
---------------
o1: date-23.03
o2: date-23.03
o3: date-24.05
o4: date-25.05

如何创建另一个列表,其中包含具有相同日期的对象的内部列表?例如:

new list<list<type>>
-----------------------
List<type> innerList1 {o1, o2}
List<type> innerList2 {o3}
List<type> innerList3 {o4}

可能的 LINQ 解决方案会很酷,但算法也会很好。

【问题讨论】:

  • 不要使用List&lt;object&gt;,而是使用List&lt;RealClass&gt;

标签: c# linq list generics group-by


【解决方案1】:

不要使用List&lt;object&gt;,而是使用List&lt;RealClass&gt;

假设它实际上是一个已知类型并且它是一个DateTime 属性:

List<List<ClassName>> objectsbyDate = listOfObjects
    .GroupBy(x => x.DateTimeProperty.Date)
    .Select(g => g.ToList())
    .ToList();

如果它实际上是 string 评论的属性,为什么会这样?你应该解决这个问题。但是,如果您坚持使用string,您仍然可以使用Enumerable.GroupBy。但是如果两个物体有不同的年份呢?您甚至不会提及它,因为没有存储年份。

如果要显示它,请在最后一步将DateTime 转换为字符串。

【讨论】:

  • @V.G.:代表DateTime的字符串,为什么会这样?但是,它只包含月份和日期,那么如果它包含不同的年份呢?你总是想把他们当作DateTime.Today.Year吗?
【解决方案2】:

按日期对象分组:

List<object> list = new List<object> {o1,o2,o3,o4};

var result = list.GroupBy(g => g);
foreach(var group in result) {
    Console.WriteLine(group.Key);
}

【讨论】:

  • 使用:list.GroupBy(g => g.ToList()).ToList(),获取List>
猜你喜欢
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 2013-12-06
  • 1970-01-01
相关资源
最近更新 更多