按两个值中的最小值排序

sort by minimum of two values

我正在构建一个应用程序,让您可以选择按最便宜、最近的位置和附近最便宜的方式对不同加油站的可用燃料列表进行排序。但是,我不知道最后一个的正确代码是什么。 我的代码现在看起来像这样:

switch searchMode {
        case .queryByNearby:
            orderedList.sort { [=10=].distance < .distance }
        case .queryByCheapest:
            orderedList.sort { [=10=].price < .price }
        case .queryByCheapestNearby:
            orderedList.sort { [=10=].price < .price && [=10=].distance < .distance }
}

有什么办法可以做到这一点吗?

正如一些评论已经提到的,在第 3 种情况下“附近最便宜”,您需要决定哪个具有更高的优先级、价格或距离。基于此可以实现以下解决方案。

如果价格有更高的优先级

switch searchMode {
    case .queryByNearby:
        orderedList.sort { [=10=].distance < .distance }
    case .queryByCheapest:
        orderedList.sort { [=10=].price < .price }
    case .queryByCheapestNearby:
        orderedList.sort { [=10=].price == .price ? [=10=].distance < .distance : [=10=].price < .price }
}

如果距离有更高的优先级

switch searchMode {
    case .queryByNearby:
        orderedList.sort { [=11=].distance < .distance }
    case .queryByCheapest:
        orderedList.sort { [=11=].price < .price }
    case .queryByCheapestNearby:
        orderedList.sort { [=11=].distance == .distance ? [=11=].price < .price : [=11=].distance < .distance }
}

您可以同时实现这两个选项,并为用户提供 4 个选项。