c# - 排序列表是最好的解决方案吗?

标签 c# list sorting

我正在为学校做一个项目,我正在努力决定我应该如何去做。

这是一个餐厅模拟。我生成了一张随机的 table 和等候方列表。我随机安排了一些有保留的聚会,有些没有在等候名单上。我希望有保留的一方优先。

对列表进行排序,以便所有有保留的各方都在一端,而没有另一端的各方是否是解决此问题的好方法?

然后我可以评估列表,看看这个聚会是否适合餐 table ,然后让他们就座或继续下一个聚会。还是有更聪明的方法来解决这个问题?任何意见表示赞赏!

最佳答案

var groupedParties = parties.GroupBy(p => p.HasReservation);

这是目前为止我看到的最干净的方式。您会得到一个包含两组的列表,一组包含没有预订的各方,另一组包含有预订的各方。您现在可以单独处理不同类型的等待方的座位。

编辑

static void Main(string[] args)
{
    GenerateRandomDataSomehow();
    var groupedParties = _parties.GroupBy(p => p.HasReservation)
    SeatParty(groupedParties.FirstOrDefault(g => g.Key == true));
    SeatParty(groupedParties.FirstOrDefault(g => g.Key == false));
}

private static void SeatParty(IEnumerable<Party> partyGroup)
{
    if (partyGroup == null) return;

    foreach (var party in partyGroup.OrderBy(p => p.ArrivalTime))
    {
        var properTable = _tables.FirstOrDefault(t => t.SeatsCount == party.PersonsCount &&
                                                      t.Party == null);
        if (properTable == null) continue;
        properTable.Party = party;
    }
}

这是一个带有更多 LINQ 的非常简单的实现。选择标准需要适当扩展。在此表中,如果没有其他人坐在这张 table 上,并且如果人数与相应 table 的座位数完全一致,则该表被评估为“适当”。如果找不到合适的表,则跳过该组。

关于c# - 排序列表是最好的解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15155421/

相关文章:

C#程序。在国际象棋中确定皇后的正确着法

python - 使用字典(python)中的特定键构建列表?

algorithm - 最小化数组中相关项之间的距离

algorithm - F# 从列表中插入/删除项目

按方案中的第一个元素对列表列表进行排序

sql - 如何在 PostgreSQL 中对二维 int 数组进行排序?

c# - 从 CefSharp 网络浏览器获取 HTML 源代码

c# - 从 DayOfWeek , Month 获取前三个字符

c# - 锁定公共(public)对象,并跨模块共享

python - 改进 Python 中仅基于某些列的重复数据删除列表的运行时间