arrays - Swift 4 数组查找或第一个

标签 arrays swift

我正在尝试对结构数组执行过滤器,如果元素存在则返回该元素,否则返回数组中的第一个元素。目前我有一个 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/

相关文章:

ios - NSHTMLTextDocumentType 未显示在分页 VC 的属性 TextView 中

ios - 如何避免在 Realm 数据库中添加具有相同主键的相同数据模型?

swift - 访问 NSTableviews 自定义 Tablecellview

java - Android App 中的 NullPointerException

ios - 更新注释 View 时如何在自定义注释图钉中做动画

c++ - 如何报告异或为零的子数组的索引?

c++ - 如何将 bool vector memcpy 到 char 数组?

swift - 调用私有(private) var 来方便 init (swift)

arrays - 在 Swift 中将 JSON 数组转换为 Int 数组

java - 如何在 Java 中删除整数数组?