2011-10-14 11 views
5

Tengo un conjunto de diccionarios en una matriz. Expongo esta información en una vista de tabla. En la tabla, calculo la distancia a cada objeto y lo visualizo en la celda.Ordenar por distancia

Los datos deben poder ordenar en función de la distancia ascendente, obviamente por ubicación del usuario. ¿Cuál es la mejor manera de abordar esto? Pensé en separar todos los diccionarios e insertar la distancia y luego soltar el NSSortDescriptor, el problema es que soy demasiado flojo para eso.

En este momento estoy simplemente recorriendo todos los datos con el indexPath.row y mostrándolo.

Respuesta

13

Puede ordenar fácilmente con una API de comparador basada en bloques.

NSArray *rawData = [NSArray arrayWithContentsOfFile:pathDoc]; 

rawData = [rawData sortedArrayUsingComparator: ^(id a, id b) { 

    CLLocationDistance dist_a= [[a objectsForKey:@"coordinate"] distanceFromLocation: userPosition]; 
    CLLocationDistance dist_b= [[b objectsForKey:@"coordinate"] distanceFromLocation: userPosition]; 
    if (dist_a < dist_b) { 
     return NSOrderedAscending; 
    } else if (dist_a > dist_b) { 
     return NSOrderedDescending; 
    } else { 
     return NSOrderedSame; 
    } 
}]; 

Debe fácil encontrar una implementación para calculate_distance(user_position, a); con Google.

+0

Ya estaba calculando la distancia con distanceFromLocation: pero para una ubicación, necesito la latitud y la longitud de un diccionario de NSArray. Hice un bucle con for() y NSDictionary * dict = [array objectAtIndex: i], pero ¿cómo encajo eso con la API comparativa basada en bloques? – MaikelS

+1

ver mi edición. para obtener más ayuda, tendrá que publicar su código. – vikingosegundo

+0

Un poco más de código aquí: http://pastebin.com/dndv7dk1 editado un poco para mantenerlo legible. – MaikelS