2011-12-22 14 views
5

Duplicar posibles:
What is the most efficient way to sort an NSSet?object-c sort NSMutableSet of NSStrings?

tengo actualmente un NSMutableSet con la siguiente una lista de cadenas. por ejemplo: {@ "c", @ "d", @ "e", @ "f", @ "g", @ "a"}

Puede alguien por favor dígame cómo puedo solucionar estos valores alfabéticamente? ¿Hay alguna manera de hacerlo usando sortedArrayUsingDescriptors:?

+1

http://stackoverflow.com/questions/1351182/how-to-sort-a-nsarray- alphaphabetically –

+1

El selector de la publicación anterior está disponible en NSSet. Tenga en cuenta que ya no será un conjunto. Las matrices están ordenadas, los conjuntos no. –

+0

Yo diría que esto es ** no ** un duplicado de esa pregunta. Específicamente, esa otra pregunta, más general, ofrece cero ayuda sobre cómo crear el descriptor en este caso particular y no es tan obvio como parece, porque lo primero que piensas es "pero no quiero ordenarlo". en una tecla del objeto; quiero ordenar en función del objeto mismo ". Por supuesto, la respuesta es que la tecla "self" se lo da a usted, pero para las personas que no conocen la codificación de clave-valor hacia atrás y hacia adelante, no es particularmente obvio. :-) – dgatwood

Respuesta

15

Claro, usted puede usar ese método:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES]; 
NSArray *sortedArray = [mySet sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]]; 

Esto sólo crea un nuevo descriptor de clasificación que especifica la clave "Descripción" (NSString proporciona un método -description que devuelve la cadena). A continuación, pasa una matriz que contiene ese descriptor de clasificación como un parámetro a -sortedArrayUsingDescriptors:, que puede enviar a cualquier NSSet.

+0

Si pasa "self" como clave, obtendrá los mismos resultados. Creo que al solicitar la clave de descripción, en realidad estás haciendo un trabajo extra. Específicamente, creo que obtiene el valor que se debe usar para ordenar llamando al método de descripción sobre el valor de la clave solicitada, por lo que en realidad está tomando la descripción de la descripción). – dgatwood

+0

@dgatwood me ganaste. Acabo de escribir un código para ordenar una matriz de NSStrings y decidí colocar @ "self" para la clave. Vine aquí para ver si había una alternativa. – pnizzle

+0

@dgatwood No está equivocado, pero usar * description * es un poco más robusto ya que funciona incluso si la matriz contiene objetos que no son cadenas. Si eso es realmente deseable es una cuestión de opinión ya que OP especificó que los objetos son cuerdas, pero al mismo tiempo la cantidad de trabajo extra es insignificante. – Caleb

-2

NSSets son colecciones desordenadas. Si desea un contenedor clasificado, use NSArray.

1

Voy a suponer que esta pregunta Sorting NSSet es la respuesta a su pregunta. Para el disco de hacer clic ...

[mySet sortedArrayUsingDescriptors:descriptors];