首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift过滤器嵌套数组

Swift过滤器嵌套数组
EN

Stack Overflow用户
提问于 2016-09-20 21:24:52
回答 5查看 10.4K关注 0票数 4

我有一个NSMutableArray,它本身在里面有很多数组。在每个数组中,在所有索引中,它们还具有下面给出的类的自定义对象。

代码语言:javascript
运行
复制
Class User:NSObject{
    var name = ""
    var userName = ""
    var email = ""
    var age = 0
    var gender = ""
    var 
}

我想根据两个对象过滤这个嵌套数组。例如,如果用户在searchBar中键入一些文本,并检查该嵌套数组中的文本是否与名称和/或userName相匹配。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-09-20 21:40:24

代码语言:javascript
运行
复制
let textToSearch:String = "some text"

for nestedArray in myArray {

    for item:User in nestedArray
    {
        if user.name.contains(textToSearch) || user.userName.contains(textToSearch)
        {
            print("found")
        }
    }

}
票数 3
EN

Stack Overflow用户

发布于 2016-09-20 22:06:46

代码语言:javascript
运行
复制
let nestedArray: [[User]] = [[user1, user2], [user3], [user4, user5]]

let searchName = "foo"
let filteredArray = nestedArray.map({
        return $0.filter({ $0.name == searchName })
    }).filter({ $0.count > 0 })

这是一种纯粹的函数式方法,它会产生一个新的嵌套数组,其中只包含具有匹配用户的数组,并且这些数组也将只包含匹配的用户。

票数 7
EN

Stack Overflow用户

发布于 2016-09-20 22:08:34

一些建议

结构更适合于模型值。

代码语言:javascript
运行
复制
struct User {
    let name: String
    let userName: String
    let email: String
    let age: Int
    let gender: String
}

不要使用NSMutableArray

NSMutableArray是一个Objective-C类。你可以通过Swift访问它,但是你应该使用Swift数组结构。它速度更快,并且作为一个值类型,可以防止与访问共享对象的代码的多个部分相关的bug。

过滤数据

现在给出一个由User数组组成的数组

代码语言:javascript
运行
复制
let data: [[User]] = ...

和一个关键字

代码语言:javascript
运行
复制
let keyword: String = ...

你可以过滤你的数据写入

代码语言:javascript
运行
复制
let matchingUsers = data
    .flatMap { $0 }
    .filter { $0.name.range(of: keyword) != nil || $0.userName.range(of: keyword) != nil }

现在matchingUsers是一个User(s)数组,其中nameusername包含keyword

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39595393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档