Замена элемента в наборе, если выполняется условие - PullRequest
0 голосов
/ 25 января 2019

Я работаю с Set из CarCagetory:

public struct Images {
    static let categoryTeaser = UIImage()
}

public enum PremiumModel {
    case model1, model2, model3, unknown 
}

public struct CarCategory {
    public let teaserImage: UIImage
    public let make: String
    public let model: PremiumModel
    public let startPrice: Double
}

// MARK: - Equatable
extension CarCategory: Equatable {
    public static func == (lhs: CarCategory, rhs: CarCategory) -> Bool {
        return lhs.model == rhs.model
    }
}

// MARK: - Hashable
extension CarCategory: Hashable {
    public var hashValue: Int {
        return model.hashValue
    }
}

Я перебираю массив Cars и извлекаю набор категорий в соответствии с моделью:

var categories = Set<CarCategory>()

carSpecifications.forEach {
    if PremiumModel(rawValue: $0.car.model) != .unknown {    
        categories.insert(CarCategory(teaserImage: Images.categoryTeaser, make: $0.car.make, model: PremiumModel(rawValue: $0.car.model), startPrice: $0.pricing.price))
    }
}

Это работает просто отлично.

Теперь я хочу, чтобы мой Набор обновлялся по самой низкой цене для определенной модели.Я думаю о словаре [PremiumModel: Double], где я сохраняю самую низкую цену для модели и в конце обновляю свой Набор соответствующим образом, но мне интересно, есть ли лучший способ.

Редактировать:

Это моя текущая реализация с использованием словаря.Это чувствует себя элементарно ...

carSpecifications.forEach {
    let model = PremiumModel(rawValue: $0.car.model)
    if model != .unknown {

        if let value = minPriceForModel[model] {
            minPriceForModel[model] = min(value, $0.pricing.price)
        } else {
            minPriceForModel[model] = $0.pricing.price
        }

        categories.insert(CarCategory(teaserImage: Images.categoryTeaser, make: $0.car.make, model: model, startPrice: $0.pricing.price))
    }
}

let sortedCategories = Array(categories.sorted(by: <))
    .compactMap { (category: CarCategory) -> CarCategory in
    var newCategory = category
    newCategory.startPrice = minPriceForModel[category.model] ?? 0
    return newCategory
}

return sortedCategories
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...