【问题标题】:C# Grouping a sorted List by following valueC#按以下值对排序列表进行分组
【发布时间】: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 相同的司机,因为一个司机负责一个特定的地区)他可以等待下一个订单并且可以交付

标签: c# group-by sortedlist


【解决方案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循环然后回头看非常感谢
猜你喜欢
  • 2010-11-18
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多