Arrays 在包含自定义类的数组中查找值
我试图在包含结构的数组中找到值的位置。 我的数组看起来像这样Arrays 在包含自定义类的数组中查找值,arrays,swift,Arrays,Swift,我试图在包含结构的数组中找到值的位置。 我的数组看起来像这样 struct User { var firstName: String? var lastName: String? } var allThePeople = [User(firstName: "John", lastName: "Doe"), User(firstName: "Jane", lastName: "Doe"), User(firstName: "John", lastName: "Travolta")]; 有没有办
struct User {
var firstName: String?
var lastName: String?
}
var allThePeople = [User(firstName: "John", lastName: "Doe"), User(firstName: "Jane", lastName: "Doe"), User(firstName: "John", lastName: "Travolta")];
有没有办法获得数组中所有“Doe”的位置?(在本例中为0和1)您可以筛选
所有人
,条件是获取所有姓氏为“Doe”的人
您可以枚举数组并将其平面映射到索引数组
let allTheDoeIndexes = allThePeople.enumerated().flatMap { $0.element.lastName == "Doe" ? $0.offset : nil }
= allThePeople.enumerated().flatMap { $1.lastName == "Doe" ? $0 : nil }
您可以过滤
所有人
,条件是获取所有姓氏为“Doe”的人
您可以枚举数组并将其平面映射到索引数组
let allTheDoeIndexes = allThePeople.enumerated().flatMap { $0.element.lastName == "Doe" ? $0.offset : nil }
= allThePeople.enumerated().flatMap { $1.lastName == "Doe" ? $0 : nil }
如果需要实际的索引,请使用
struct User {
var firstName: String?
var lastName: String?
}
var allThePeople = [User(firstName: "John", lastName: "Doe"), User(firstName: "Jane", lastName: "Doe"), User(firstName: "John", lastName: "Travolta")]
var indices = [Int]()
for i in 0 ..< allThePeople.count {
if allThePeople[i].lastName == "Doe" {
indices.append(i)
}
}
indices // [0,1]
struct用户{
var firstName:String?
var lastName:String?
}
var allThePeople=[用户(名字:“约翰”,名字:“Doe”),用户(名字:“简”,名字:“Doe”),用户(名字:“约翰”,名字:“特拉沃尔塔”)]
var指数=[Int]()
对于0中的i..
否则,按照@Callam的建议使用
过滤器。如果需要实际索引,请使用
struct User {
var firstName: String?
var lastName: String?
}
var allThePeople = [User(firstName: "John", lastName: "Doe"), User(firstName: "Jane", lastName: "Doe"), User(firstName: "John", lastName: "Travolta")]
var indices = [Int]()
for i in 0 ..< allThePeople.count {
if allThePeople[i].lastName == "Doe" {
indices.append(i)
}
}
indices // [0,1]
struct用户{
var firstName:String?
var lastName:String?
}
var allThePeople=[用户(名字:“约翰”,名字:“Doe”),用户(名字:“简”,名字:“Doe”),用户(名字:“约翰”,名字:“特拉沃尔塔”)]
var指数=[Int]()
对于0中的i..
否则,按照@Callam的建议使用filter
。您想要筛选数组或条件索引?您想要筛选数组或条件索引?闭包可以稍微缩短为{$1.lastName==“Doe”?$0:nil}<代码>也许是一个味觉的问题。你的<代码>平面图<代码>比<<代码>对于循环答案(我赞成你)更为简洁——但是对于新手来说可能太简洁了——考虑添加一点解释吗?我可以添加更多的过滤器吗?假设我想找到所有姓氏Doe和姓氏John的名字的索引?是的,你可以这样做allThePeople.enumerated().flatMap{$1.firstname==“John”&&&$1.lastname==“Doe”?$0:nil}
闭包可以稍微缩短为{$1.lastname==“Doe”?$0:nil}<代码>也许是一个味觉的问题。你的<代码>平面图<代码>比<<代码>对于循环答案(我赞成你)更为简洁——但是对于新手来说可能太简洁了——考虑添加一点解释吗?我可以添加更多的过滤器吗?假设我想找到所有姓氏Doe和姓氏John的名字的索引?是的,你可以这样做allThePeople.enumerated().flatMap{$1.firstname==“John”&&&$1.lastname==“Doe”?$0:nil}