根据快速的嵌套数组元素搜索显示主数组结果 [英] Show master array results, based on nested array element search in swift

查看:118
本文介绍了根据快速的嵌套数组元素搜索显示主数组结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一组示例数据

public var myResults : [Section] =[:]

public var sectionsData: [Section] = [
     Section(name: "Mac", items: [
        Item(name: "MacBook", detail: "Apple's ultraportable laptop, trading portability for speed and connectivity."),
        Item(name: "MacBook Air", detail: "While the screen could be sharper, the updated 11-inch MacBook Air is a very light ultraportable that offers great performance and battery life for the price."),
        Item(name: "MacBook Pro", detail: "Retina Display The brightest, most colorful Mac notebook display ever. The display in the MacBook Pro is the best ever in a Mac notebook."),

        Item(name: "iMac", detail: "iMac combines enhanced performance with our best ever Retina display for the ultimate desktop experience in two sizes."),

        Item(name: "Mac Pro", detail: "Mac Pro is equipped with pro-level graphics, storage, expansion, processing power, and memory. It's built for creativity on an epic scale."),

        Item(name: "Mac mini", detail: "Mac mini is an affordable powerhouse that packs the entire Mac experience into a 7.7-inch-square frame."),
       Item(name: "OS X El Capitan", detail: "The twelfth major release of OS X (now named macOS)."),

      Item(name: "Accessories", detail: "")
        ],collapsed: false),

Section(name: "iPad",
 items: [
        Item(name: "iPad Pro", detail: "iPad Pro delivers epic power, in 12.9-inch and a new 10.5-inch size."),

        Item(name: "iPad Air 2", detail: "The second-generation iPad Air tablet computer designed, developed, and marketed by Apple Inc."),
        Item(name: "iPad mini 4", detail: "iPad mini 4 puts uncompromising performance and potential in your hand."),

        Item(name: "Accessories", detail: "")
        ] ,collapsed: false),


Section(name: "iPhone", items: [
        Item(name: "iPhone 6s", detail: "The iPhone 6S has a similar design to the 6 but updated hardware, including a strengthened chassis and upgraded system-on-chip, a 12-megapixel camera, improved fingerprint recognition sensor, and LTE Advanced support."),

        Item(name: "iPhone 6", detail: "The iPhone 6 and iPhone 6 Plus are smartphones designed and marketed by Apple Inc."),

        Item(name: "iPhone SE", detail: "The iPhone SE was received positively by critics, who noted its familiar form factor and design, improved hardware over previous 4-inch iPhone models, as well as its overall performance and battery life."),

        Item(name: "Accessories", detail: "")
        ],collapsed: false)
]

如果我基于Item数组内的明细值进行搜索,例如明细包含"iPhone"如何获取主数组结果以及嵌套值

If I search based on detail value inside the Item array for example details contains 'The iPhone' how to get master array results along with nested values

我的结果应该是

myResults = Section(name: "iPhone", items: [
  Item(name: "iPhone 6s", detail: "The iPhone 6S has a similar design to the 6 but updated hardware, including a strengthened chassis and upgraded system-on-chip, a 12-megapixel camera, improved fingerprint recognition sensor, and LTE Advanced support."),
        Item(name: "iPhone 6", detail: "The iPhone 6 and iPhone 6 Plus are smartphones designed and marketed by Apple Inc."),
        Item(name: "iPhone SE", detail: "The iPhone SE was received positively by critics, who noted its familiar form factor and design, improved hardware over previous 4-inch iPhone models, as well as its overall performance and battery life.")
],collapsed: false)

推荐答案

这应该可以解决问题:

let text = "The iPhone"
let filteredSections = sectionsData.compactMap({ (aSection) -> Section? in
    let keptItems = aSection.items.filter({ $0.detail.contains(text) })
    if keptItems.isEmpty {
        return nil
    } else {
        return Section(name: aSection.name, items: keptItems, collapsed: aSection.collapsed)
    }
})

我们迭代sectionsData. 我们根据要搜索的文本过滤Section的项目. 如果没有任何项目,我们将其跳过(return nil). 否则,我们将创建一个新部分,保留该部分的其他值,但保留过滤后的项目.

We iterate sectionsData. We filters the items of a Section according to the text to search. If there are no items, we skip it (return nil). Else, we create a new section keeping the other values of the section but with the filtered items.

这篇关于根据快速的嵌套数组元素搜索显示主数组结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆