用另一个不同类型的数组过滤一个对象数组
Posted
技术标签:
【中文标题】用另一个不同类型的数组过滤一个对象数组【英文标题】:Filtering an Object Array with another Array of a different type 【发布时间】:2016-11-29 20:35:34 【问题描述】:我已经阅读了我能读懂的所有内容,但似乎无法弄清楚这一点。我有一个创建 [Item] 数组的 ItemManager 类。我需要能够使用另一个数组 [Category.name] 过滤 [ItemManager.Items] 数组。具体来说,我想过滤 ItemManager.Items 中包含 Category.name 中的 Array 元素的所有 Array 元素。任何帮助表示赞赏。
class Item: NSObject
var name: String?
var category: String?
var price: Int?
init(name: String, category: String, price: Int)
self.name = name
self.category = category
self.price = price
class ItemManager: NSObject
static var items = [Item]()
class func addItem(name: String, category: String, price: Int)
let i = Item(name: name, category: category, price: price)
return items.append(i)
struct Category
var name: [String]
subscript(index: Int) -> String
return name[index]
【问题讨论】:
【参考方案1】:试试下面的
1.将项目添加到列表中:
ItemManager.addItem(name: "Basketball", category: "Sports", price: 20)
ItemManager.addItem(name: "Football", category: "Sports", price: 15)
ItemManager.addItem(name: "Flashlight", category: "Outdoors", price: 35)
ItemManager.addItem(name: "Code Complete", category: "Books", price: 70)
ItemManager.addItem(name: "Code Complete 2nd Edition", category: "Books", price: 72)
2。创建一个类别数组,用于过滤ItemManager.list
:
let categoriesToFilterBy = ["Sports", "Outdoors"]
3.使用filter
方法过滤ItemManager.list
:
var filteredList = ItemManager.items.filter
if let category = $0.category
return categoriesToFilterBy.contains(category)
return false
4.打印结果:
for item in filteredList
if let name = item.name, let category = item.category, let price = item.price
print("Item Name: \(name), Category: \(category), Price: \(price)")
5.结果(注意:仅打印了等于“运动”和“户外”的类别):
Item Name: Basketball, Category: Sports, Price: 20
Item Name: Football, Category: Sports, Price: 15
Item Name: Flashlight, Category: Outdoors, Price: 35
数组上的filter
方法采用一个闭包,如果元素应该包含在返回的数组中,则该闭包预期返回true
,如果元素不应该是返回的数组的一部分,则返回false
返回。
您可以在此处阅读有关过滤方法的更多信息:https://developer.apple.com/reference/swift/array/1688383-filter
【讨论】:
像魅力一样工作!我没有从过滤器迭代结果数组。谢谢。以上是关于用另一个不同类型的数组过滤一个对象数组的主要内容,如果未能解决你的问题,请参考以下文章