brandonscript
brandonscript

Reputation: 72865

Find first element in array that matches a specific condition in Swift

Let's say I have an array like so:

[
    ["required": true],
    ["required": true],
    ["required": false],
    ["required": false],
    ["required": false],
    ["required": false],
    ["required": false]
]

I want to insert a new element into this array at the index where required first equals false (at position 2). I'm sure I could determine this using a basic for-each loop, e.g.:

var idx = 0
for (i, el) in myArray.enumerate() {
    if el["required"] == false {
        idx = i
        break
    }
}

But this doesn't seem very Swift-like. Is there a cleaner (i.e. less code) way of doing this in Swift 2? Perhaps something using filter or map?

Upvotes: 1

Views: 3146

Answers (2)

konrad.bajtyngier
konrad.bajtyngier

Reputation: 1786

How about this:

let idx = myArray.indexOf({$0["required"] == false})

Swift 3:

let idx = myArray.index(where: { $0["required"] == false })

Upvotes: 8

vikingosegundo
vikingosegundo

Reputation: 52227

let required    = array.filter { $0["required"] == true }
let notRequired = array.filter { $0["required"] == false }
let result      = required + [["required": true]] + notRequired

Upvotes: 0

Related Questions