views:

137

answers:

2

I'm trying to use an if statement to work out which of 2 strings comes first alphabetically. Like with numbers and greater and less than:

if (1 < 2) {

just with strings:

if(@"ahello" < @"bhello") {

Or would I have to have a string containing all the letters and then check the index of the first char in each string and see which index is greater, and the index that is less than the other comes first in the alphabet and then if they are equal move on to the next char and repeat?

+4  A: 

NSString has a whole slew of compare: methods to do just what you want. Some are very simple, and others have a bunch of options you can use to customise the behaviour. Check out the documentation.

Carl Norum
+2  A: 

What you can do is:

NSString *stringOne = @"abcdef";
NSString *stringTwo = @"defabc";

NSComparisonResult result = [stringOne compare:stringTwo];

if (result == NSOrderedAscending) // stringOne < stringTwo
    ...

if (result == NSOrderedDescending) // stringOne > stringTwo
    ...

if (result == NSOrderedSame) // stringOne == stringTwo
    ...

There are also other methods for performing different kinds of comparisons (such as case-insensitivity, diacritic insensitivity, etc), but the result of the comparison can still be treated like the above. Alternatively, some people find it easier to compare result to 0. The operator used to compare result to 0 would be the same operator used in other languages where string comparisons can be done directly:

if (result < 0) // stringOne < stringTwo
    ...

if (result > 0) // stringOne > stringTwo
    ...

if (result == 0) // stringOne == stringTwo
    ...

Most (if not all) of the compare:... methods of NSString are wrappers for compare:options:range:locale:. The different kinds of options that you can pass can be found here.

dreamlax