首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift 3使用数组元素过滤对象数组

Swift 3使用数组元素过滤对象数组
EN

Stack Overflow用户
提问于 2017-04-07 08:30:00
回答 2查看 63.7K关注 0票数 25
代码语言:javascript
运行
复制
array1 = array1.filter{ $0.arrayInsideOfArray1.contains(array2[0]) }

上面的代码可以工作,但我正在尝试检查$0.arrayInside OfArray1的所有元素是否都与array2的所有元素匹配,而不仅仅是

示例:

代码语言:javascript
运行
复制
struct User {
    var name: String!
    var age: Int!
    var hasPet: Bool!
    var pets: [String]!
}

var users: [User] = []

users.append(User(name: "testUset", age: 43, hasPet: true, pets: ["cat", "dog", "rabbit"]))
users.append(User(name: "testUset1", age: 36, hasPet: true, pets:["rabbit"]))
users.append(User(name: "testUset2", age: 65, hasPet: true, pets:["Guinea pigs", "Rats"]))

let petArr = ["cat", "dog", "rabbit"]

users = users.filter { $0.pets.contains(petArr[0]) }

我想要的是任何用户,谁有任何宠物在petArr中列出!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-07 10:52:54

一种方法是更新您的过滤器,以查看petArr数组中是否有宠物中的值:

代码语言:javascript
运行
复制
users = users.filter { $0.pets.contains(where: { petArr.contains($0) }) }

第一个$0来自filter,它代表每个User

第二个$0来自第一个contains,它表示当前Userpets数组中的每个宠物。

票数 62
EN

Stack Overflow用户

发布于 2017-04-07 09:37:17

如果内部数组中的元素是Equatable,你可以这样写:

代码语言:javascript
运行
复制
array1 = array1.filter{ $0.arrayInsideOfArray1 == array2 }

如果不是,您可以通过采用Equatable协议并实现:

代码语言:javascript
运行
复制
func ==(lhs: YourType, rhs: YourType) -> Bool
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43267827

复制
相关文章

相似问题

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