首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >公交线路选项排序的逻辑/算法

公交线路选项排序的逻辑/算法
EN

Stack Overflow用户
提问于 2015-07-01 17:28:53
回答 1查看 289关注 0票数 0

我正在尝试实现下面的公交路线排序算法。

客户搜索从A到B的巴士,并选择首选的载体。(例如:达拉斯到芝加哥的灰狗)假设有一个web服务,返回A到B的巴士路线选项列表,每个BusOption对象都有以承运人作为属性之一的分段列表,以及出发时间、到达时间等。

我需要按下面的顺序对结果进行排序。

  1. 首先显示从A到B的直达巴士在首选的承运人上。(每组内按最早到达时间进行排序)
  2. 在首选的载体上连接A到B的公共汽车。
  3. 从A站连接到中间站的非首选载体的首选载体上的总线。
  4. 非首选航空公司的直达巴士
  5. 从A连接非首选载波,然后从中间站连接首选载波。
  6. 通过路线连接非优先运营商

例如:达拉斯到芝加哥乘灰狗

代码语言:javascript
运行
复制
ORG         DEST        CARRIER     DEPART  ARRIVAL     
  1. 上午11点达拉斯芝加哥灰狗
  2. 达拉斯芝加哥灰狗公司上午11时45分
  3. 达拉斯-堪萨斯灰狗公司下午1点 堪萨斯城-芝加哥灰狗下午2点10分
  4. 达拉斯-堪萨斯灰狗公司下午1点 堪萨斯城-芝加哥MEGABUS下午2点10点
  5. 达拉斯芝加哥Megabus上午6点晚上11点
  6. 达拉斯-堪萨斯州Megabus上午6时下午1点 堪萨斯城-芝加哥灰狗下午2点10分
  7. 达拉斯-堪萨斯州MEGABUS上午6时下午1点 堪萨斯城

我最初想为每组使用一个集合,这样就有6个Set对象。在将WS响应映射到包含段列表和isPreferredCarrier标志的isPreferredCarrier类的自定义响应时,如果至少有一个载波是非预置的,则将prefferredCarrier标志设置为false。然后,

代码语言:javascript
运行
复制
If(routeOption.getSegments.size()==1 and routeOption.isPreferredCarrier()){
    Add to Set 1
}else //continue similar logic and add to corresponding Set

按1到6的顺序合并所有集合。

这是正确和最佳的方法吗?如果您认为有更好的排序逻辑,请提供建议。

EN

回答 1

Stack Overflow用户

发布于 2015-07-01 17:56:37

如果至少有一个载波是非首选的,则不能将isPreferredCarrier标志设置为false,因为在这种情况下不能设置3。因此,应该保留每个段的标志:

代码语言:javascript
运行
复制
if (routeOption.getSegments.size()==1 &&
    routeOption.getSegments[0].isPreferredCarrier())
    Add to Set 1;
else if (routeOption.getSegments.size()==2 &&
    routeOption.getSegments[0].isPreferredCarrier() &&
    routeOption.getSegments[1].isPreferredCarrier())
    Add to Set 2;
else if (routeOption.getSegments.size()==2 &&
    routeOption.getSegments[0].isPreferredCarrier())
    Add to set 3;
else ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31167950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档