Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using map with filter

Tags:

swift

I want to iterate over an array of arrays so search for a specific item and return true if exits.

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()

This works but there a shorter version using .map and avoiding for object in mainArray ? like mainArray.map.filter... ?

like image 382
Godfather Avatar asked Nov 20 '25 13:11

Godfather


1 Answers

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

func search() -> Bool {
  return mainArray.contains { $0.contains("john") }
}

Or, in Swift 1:

func search() -> Bool {
  return contains(mainArray) {
    inner in contains(inner) {
      $0 == "john"
    }
  }
}

As was pointed out by @AirspeedVelocity, you can actually make those closures have shorthand arguments:

func search() -> Bool {
  return contains(mainArray) { contains($0) { $0 == "john" } }
}
like image 56
oisdk Avatar answered Nov 22 '25 02:11

oisdk



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!