检查数组中的重复预订
本文关键字:数组 检查 | 更新日期: 2023-09-27 18:31:21
好的,我的项目是为音乐比赛创建一个活动组织者。基本上,我获取输入数据,例如大约 400 个条目的列表,并按房间号和类型输出到几个单独的 excel 表中。问题是,在将事件分配给数组时,(我为每个房间都有一个单独的数组,所有数组都包含在一个列表中)我需要检查并修复伴奏者是否在同一时间段被重复预订。或者本质上,如果两个不同的数组对数组具有相同的伴奏值[i]
想法?请试着解释好,我是自学成才的,只有一点经验
private void assignEvents()
{
// assign every event in order
// check accompanists for no double-books
foreach (Event[] room in roomList)
{
int i = 0;
foreach (Event ev in eventList)
{
if (ev.Type == room[0].Type)
{
room[i] = ev;
i++;
}
}
}
你可以像 Tejs 建议的那样使用 LINQ 来做到这一点,但我会走另一条路,因为你正在设计一个组织者,你可能需要额外的信息(例如,显示伴奏者的日程安排)。我会有一个所有伴奏者的列表,其中包含他们所有预订的排序数组(基本上,他们的日程安排)。然后,您可以使用一个功能来检查每个新预订中每个伴奏是否存在冲突(在预订数组中),如果没有,请继续将预订添加到伴奏的日程安排中
如果我理解正确,您必须比较每列的值。我建议通过从实际集合类型派生来创建您自己的RoomList
集合类,并添加迭代列的可能性
public class RoomList : List<Event[]>
{
public IEnumerable<Event> TimeSlot(int columnIndex)
{
foreach (Event[] events in this) {
if (events != null && columnIndex < events.Length) {
yield return events[columnIndex];
}
}
}
}
然后,您可以使用 LINQ 获取重复预订
RoomList roomList = new RoomList();
// ...
for (int slot = 0; slot < roomList[0].Length; slot++) {
var doubleBooked = roomList.TimeSlot(slot)
.GroupBy(e => e.Type)
.Where(g => g.Count() > 1);
if (doubleBooked.Any()) {
Console.WriteLine("Doubly booked accompanists in slot {0}", slot);
foreach (var accompanistGroup in doubleBooked) {
Console.WriteLine(" {0}", accompanistGroup.Key);
}
}
}