用另一个不同类型的数组过滤一个对象数组

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

【讨论】:

像魅力一样工作!我没有从过滤器迭代结果数组。谢谢。

以上是关于用另一个不同类型的数组过滤一个对象数组的主要内容,如果未能解决你的问题,请参考以下文章

用另一个不同长度的数组更新对象数组

从数组中过滤对象,具有匹配两个值的差异

如何过滤对象数组并根据特定属性变得不同

Obj-C - 用另一个数组过滤 NSMutableArray?

根据来自不同对象数组的属性和值过滤对象数组

Swift:具有特定类型的Any对象的过滤器数组