arrays - 如何根据另一个数组对数组进行排序和过滤?
问题描述
如何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]()
解决方案
使用compactMap(_:)
将每个名称映射到String
listOFFruitInCanada
使用中的Fruit
对象,即listOfFruits
first(where:)
var listOfFilterAndSortedFruits = listOFFruitInCanada.compactMap({ (name) -> Fruit? in
listOfFruits.first(where: { $0.name == name })
})
推荐阅读
- javascript - 使用 php 进行 Ajax 调用
- ibm-mobilefirst - 证书固定在本机 android Mobilefirst 8.0 应用程序中不起作用
- android - Listview OnItemClickListener 在 MainActivity 上工作,但不在类似的 TaskActivity 上
- android - Firestore 无法获取文档,因为客户端处于脱机状态
- ajax - codeignitter 中的 ajax 表单 - 发送生成的表单
- mysql - 添加连接后 MySQL 查询中断
- tableau-api - 在日期之间计数的计算字段
- php - 使用 PHP 将 JSON 转换为 HTML 表或 div
- android - 两个 ArrayList 比较和更新一个 Arraylist 还是在 android 中覆盖?
- javascript - 如何检查对象是否包含 JavaScript 数组中的文本?