2010-05-23 28 views
19

Estoy tratando de usar una instrucción if para determinar cuál de 2 cadenas viene primero alfabéticamente. Al igual que con los números y mayor y menor de:si la cadena es alfabéticamente mayor que otra cadena en el objetivo

if (1 < 2) { 

acaba con cadenas:

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

O tendría que tener una cadena que contiene todas las letras y luego comprobar el índice del primer carácter en cada cadena y ver qué índice es mayor, y el índice que es menor que el otro viene primero en el alfabeto y luego, si son iguales, pasar al siguiente carácter y repetir?

+0

igual que en C, su instrucción if compara los punteros con las cadenas y no el contenido de las cadenas. –

+0

que fue solo un ejemplo de lo que quise decir –

Respuesta

36

Lo que puede hacer es:

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 
    ... 

También hay otros métodos para realizar diferentes tipos de comparaciones (como el caso de insensibilidad, falta de sensibilidad diacrítica, etc.), pero el resultado de la comparación puede seguir siendo tratado como el anterior. Por otra parte, algunas personas les resulta más fácil comparar result a 0. El operador utiliza para comparar result a 0 sería el mismo operador que se utiliza en otros idiomas, donde las comparaciones de cadenas se pueden hacer directamente:

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

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

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

La mayoría (si no todos) de los métodos compare:... de NSString son envoltorios para compare:options:range:locale:. Los diferentes tipos de opciones que puede aprobar se pueden encontrar here.

4

NSString tiene una serie completa de compare: métodos para hacer justo lo que desee. Algunos son muy simples y otros tienen muchas opciones que puedes usar para personalizar el comportamiento. Consulte el documentation.

Cuestiones relacionadas