使用带过滤器的地图

God*_*her 3 swift

我想迭代一个数组数组,以便搜索特定的项目,如果退出则返回true.

var fruits = ["apple", "banana"]
var names = ["ivan", "john", "maria"]
var mainArray = [fruits, names]

// i want to return true if theres a name/fruit that is "john"
func search() -> Bool {
    for object in mainArray {
        if (object.filter { $0 == "john" }).count > 0 {
           return true
        }
    }
    return false
}


search()
Run Code Online (Sandbox Code Playgroud)

这有效,但有一个较短的版本使用.map并避免在mainArray中的对象?像mainArray.map.filter ...?

ois*_*sdk 5

var fruits = ["apple", "banana"]
var names = ["ivan", "john", "maria"]
var mainArray = [fruits, names]

func search() -> Bool {
  return mainArray.contains { $0.contains("john") }
}
Run Code Online (Sandbox Code Playgroud)

或者,在Swift 1中:

func search() -> Bool {
  return contains(mainArray) {
    inner in contains(inner) {
      $0 == "john"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

正如@AirspeedVelocity所指出的,你实际上可以使这些闭包有简写参数:

func search() -> Bool {
  return contains(mainArray) { contains($0) { $0 == "john" } }
}
Run Code Online (Sandbox Code Playgroud)