我正在尝试对结构数组执行过滤器,如果元素存在则返回该元素,否则返回数组中的第一个元素。目前我有一个 func
来做这个,想知道是否有更有效的方法。谓词或数组扩展?
例如,如果这是我的结构和方法数组:
struct Person {
let name: String
let age: Int
}
let items = [Person(name: "Fred", age: 12),
Person(name: "Bill", age: 14),
Person(name: "Jane", age: 15),
Person(name: "Mary", age: 12)]
// Find the person based on name, if no match, return first item
func filterOrFirst(with name: String? = "") -> Person?
{
if (items.contains(where: {$0.name == name}))
{
return items.first(where: {$0.name == name})
}
return items.first
}
print(filterOrFirst(with: "Bill")) // prints Bill
print(filterOrFirst()) // prints Fred
最佳答案
你可以这样做
func filterOrFirst(with name: String? = "") -> Person? {
if let item = items.first(where: {$0.name == name}) {
return item
}
return items.first
}
所以你不需要遍历整个数组两次。您可以在此处使用三元运算符。但它会增加编译时间。
关于arrays - Swift 4 数组查找或第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934026/