Using NSPredicate to determine if a string equals another string

42,405

Solution 1

Try [NSPredicate predicateWithFormat:@"title ==[c] 'on call'"];

(The [c] makes the equality comparison case-insensitive.)

Solution 2

Try predicate with format @"self.title like[c] 'on call'". The following sample code outputs 2 strings:

NSArray* ar = [NSArray arrayWithObjects:@"on call", @"I'm on call", @"lala", @"On call", nil];
NSArray* filt = [ar filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self like[c] 'on call'"]];
NSLog([filt description]);

//Output
"on call",
"On call"
Share:
42,405
Garry Pettet
Author by

Garry Pettet

I'm a former UK radiologist who now works full time as a web, desktop and iOS developer.

Updated on July 16, 2022

Comments

  • Garry Pettet
    Garry Pettet almost 2 years

    I have an NSArray of CalEvents returned with the [CalCalendarStore eventPredicateWithStartDate] method. From the events returned, I am trying to keep only those in which the title of the event == @"on call" (case-insensitive).

    I am able to keep in the array those events whose title includes @"on call" with the following code (where 'events' is a 'NSArray' populated with CalEvents):

    NSPredicate *onCallPredicate = [NSPredicate predicateWithFormat:@"(SELF.title CONTAINS[c] 'on call')"];
    [events filteredArrayUsingPredicate:onCallPredicate];
    

    I've tried using a predicate format string like:

    @"SELF.title == 'on call'" but this doesn't seem to work.

    Is there an easier way to do this?

  • Dave DeLong
    Dave DeLong almost 14 years
    +1, although you could throw the [c] modifier after the == to make it case-insensitive.
  • Cory Kilger
    Cory Kilger almost 14 years
    Edited it to be case-insensitive.
  • Garry Pettet
    Garry Pettet almost 14 years
    Is there a difference between using == and like for string comparisons?
  • Vladimir
    Vladimir almost 14 years
    Looks like in your case the work they same. But if you want to use wildcards in string comparison then '==' won't work and you'll need to use LIKE instead.
  • Samuel
    Samuel over 7 years
    Just curious, will MATCH[n] work for == when used without any (*?.) wildcards?