【发布时间】:2015-07-01 17:28:53
【问题描述】:
我正在尝试实现以下公交路线排序算法。
客户搜索从 A 到 B 的巴士并选择首选运营商。 (例如:灰狗从达拉斯到芝加哥) 假设有一个 Web 服务返回从 A 到 B 的巴士路线选项列表。每个 BusOption 对象都有以 Carrier 作为属性之一的路段列表,以及出发时间、到达时间等
我需要按以下顺序对结果进行排序。
- 首先显示首选运营商从 A 到 B 的直达巴士。 (在每个组内按最早到达时间排序)
- 在首选运营商上连接从 A 到 B 的巴士。
- 从站点 A 出发的首选运营商上的巴士从中间站连接到非首选运营商。
- 非首选运营商的直达巴士
- 从 A 连接非首选载波,然后从中间站连接首选载波。
- 通过路线连接非首选运营商
例如:灰狗从达拉斯到芝加哥
ORG DEST CARRIER DEPART ARRIVAL
1。达拉斯芝加哥灰狗 6 AM 11 PM
- 达拉斯芝加哥灰狗 7 AM 11.45 PM
-
达拉斯 - 堪萨斯灰狗 6 AM 1 PM
堪萨斯城 - 芝加哥灰狗 2 PM 10PM
-
达拉斯 - 堪萨斯灰狗 6 AM 1 PM
堪萨斯城 - 芝加哥 MEGABUS 2 PM 10PM
- 达拉斯芝加哥 Megabus 早上 6 点晚上 11 点
-
达拉斯 - 堪萨斯 Megabus 早上 6 点到下午 1 点
堪萨斯城 - 芝加哥灰狗 2 PM 10PM
-
达拉斯 - 堪萨斯 MEGABUS 早上 6 点下午 1 点
堪萨斯城 - 芝加哥 MEGABUS 2 PM 10PM 我的想法:
我最初想为每个组使用一个集合,因此六个集合对象。 在将 WS 响应映射到包含 Segments 列表和 isPreferredCarrier 标志的 BusOption 类的自定义响应时, 如果至少有一个运营商不是首选,我想将 prefferredCarrier 标志设置为 false。 那么,
If(routeOption.getSegments.size()==1 and routeOption.isPreferredCarrier()){
Add to Set 1
}else //continue similar logic and add to corresponding Set
按照所需的 1 到 6 的顺序合并所有集合。
这是正确和最佳的方法吗?如果您想到更好的排序逻辑,请告知
【问题讨论】:
-
你到底想问什么?我在这里没有看到明确的问题,这会阻止很多人回答。