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#按以下值对排序列表进行分组的主要内容,如果未能解决你的问题,请参考以下文章