C#按以下值对排序列表进行分组

Posted

技术标签:

【中文标题】C#按以下值对排序列表进行分组【英文标题】:C# Grouping a sorted List by following value 【发布时间】:2021-12-06 09:44:35 【问题描述】:

我有一个排序的“列表订单”。 该列表已排序,如下所示:

class Order 
public int Id  get; set; 
public string Name  get; set; 
public string DeliveryPerson  get; set; 

它们已经按 ID 排序:

Order12 [DeliveryPerson: Andrea]
Order13 [DeliveryPerson: David]
Order14 [DeliveryPerson: Andrea]
Order15 [DeliveryPerson: Andrea]
Order16 [DeliveryPerson: Linda]
...

现在我想根据以下 ID 按 DeliveryPerson 对它们进行分组: --> 所以 Order12 是一组, 订单 13 为一组 但是订单 14 和订单 15 属于同一组,因为从订单 14 的角度来看,订单 15 具有相同的 DeliveryPerson。 (Order16又是一个新组)

我该怎么做?我还需要使用列表或 IEnumerables 还是...? 希望有人可以帮助我。

【问题讨论】:

“Class Order”中的Code部分只是Class的一部分。在这个例子中,他们根据他们必须开车去的地方找到送货员。想象一下,他们每个订单开车 10 分钟,但烹饪订单需要 5-6 分钟。当下一个订单在同一个地区时(--> ergo 相同的司机,因为一个司机负责一个特定的地区)他可以等待下一个订单并且可以交付 【参考方案1】:

你想要一种连续的分组吗?您可以使用以下循环:

List<Order> orders = // your list

List<List<Order>> orderGroups = new List<List<Order>>();
if(orders.Count > 0) orderGroups.Add(new List<Order>  orders[0] );

for (int i = 1; i < orders.Count; i++)

    Order currentOrder = orders[i];
    if (orders[i - 1].DeliveryPerson != currentOrder.DeliveryPerson)
        orderGroups.Add(new List<Order>  currentOrder );
    else
        orderGroups.Last().Add(currentOrder);

【讨论】:

这很完美,老实说非常聪明,用一个开始for循环然后回头看非常感谢

以上是关于C#按以下值对排序列表进行分组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Freemarker 中按特定值对列表进行分组?

c# 按索引对列表进行分组

当每个字典都有不同的键时,如何按值对字典列表进行排序?

C# LINQ 组按属性集合,然后按列表定义的显式顺序对每个组进行排序[重复]

按属性值对对象列表进行排序[重复]

Android-java-如何按对象内的某个值对对象列表进行排序