【问题标题】: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]
    }
}

【问题讨论】:

    标签: ios arrays swift3


    【解决方案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

    【讨论】:

    • 像魅力一样工作!我没有从过滤器迭代结果数组。谢谢。
    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多