David Kadlcek
David Kadlcek

Reputation: 476

NSPredicate for filtering array

I am stuck on sorting in the array.

I want to sort array by name:

var mesta: NSArray = ["ceska lipa", "budejovice", "liptakov"]
var zkouska = "lip"

let predicate = NSPredicate(format: "SELF contains %@", zkouska)
print(mesta.filter{ predicate.evaluate(with: $0)})

It prints [ceska lipa, liptakov], but I want to liptakov first, because letters lip are earlier than ceska lipa

I want result [liptakov, ceska lipa]

I tried:

let predicate = NSPredicate(format: "SELF BEGINSWITH %@", zkouska)

but it prints only liptakov

Upvotes: 0

Views: 50

Answers (1)

André Slotta
André Slotta

Reputation: 14040

var mesta = ["ceska lipa", "budejovice", "liptakov"]
var zkouska = "lip"

let filtered = mesta.filter { $0.contains(zkouska) }
let sorted = filtered.sorted {
    return $0.range(of: zkouska)!.lowerBound < $1.range(of: zkouska)!.lowerBound
}

print(sorted) // ["liptakov", "ceska lipa"]

Upvotes: 2

Related Questions