首页 > 解决方案 > 如何根据另一个数组对数组进行排序和过滤?

问题描述

如何listOfFruits根据不同的国家过滤和排序并将其存储到listOfFilterAndSortedFruits?

例如: 如果我选择Canada:listOfFruit并且["Cherries", "Peer", "Cherries", "Apple"]listOfFilterAndSortedFruits

var listOfFilterAndSortedFruits:[Fruit] = [
    Fruit(name: "Cherries", taste: "Juicy"),
    Fruit(name: "Peer", taste: "Sweat"),
    Fruit(name: "Cherries", taste: "Juicy"),
    Fruit(name: "Apple", taste: "Sweat")
]
class Fruit {
    var name: String
    var taste: String

    init(name: String, taste: String) {
        self.name = name
        self.taste = taste
    }
}

class Country {
    var name: String
    var listOfFruit: [String]

    init(name: String, listOfFruit: [String]) {
        self.name = name
        self.listOfFruit = listOfFruit
    }
}

var listOfFruits:[Fruit] = [
    Fruit(name: "Apple", taste: "Sweat"),
    Fruit(name: "Orange", taste: "Tart"),
    Fruit(name: "Cherries", taste: "Juicy"),
    Fruit(name: "Banana", taste: "Sweet"),
    Fruit(name: "Carambola", taste: "Tart"),
    Fruit(name: "Peer", taste: "Sweat"),
]

var listOfCountries:[Country] = [
    Country(name: "USA", listOfFruit: ["Apple", "Orange", "Cherries"]),
    Country(name: "Brazil", listOfFruit: ["Orange", "Banana", "Peer", "Carambola"]),
    Country(name: "Canada", listOfFruit: ["Cherries", "Peer", "Cherries", "Apple"]),
]

let listOFFruitInCanada = ["Cherries", "Peer", "Cherries", "Apple"]
var listOfFilterAndSortedFruits = [Fruit]()

标签: arraysswiftsortingfilter

解决方案


使用compactMap(_:)将每个名称映射到String listOFFruitInCanada使用中的Fruit对象,即listOfFruitsfirst(where:)

var listOfFilterAndSortedFruits = listOFFruitInCanada.compactMap({ (name) -> Fruit? in
    listOfFruits.first(where: { $0.name == name })
})

推荐阅读