Buscando y clasificando rápidamente

He estado trabajando en un algorithm de búsqueda toda la tarde y me gustaría algunas opiniones. Parte de lo que estoy haciendo es específico de iOS, pero los conceptos generales no lo son.

Estoy intentando mostrar un set de datos, un directory. En el directory tengo departamentos y personas. Sé que esto suena como un ejemplo de libro de text, escúchame. No es tarea, lo prometo. (Puedo proporcionar capturas de pantalla de lo que estoy trabajando.)

Tengo una matriz de inputs, donde hay esos dos types de inputs de directory. Necesito clasificar las inputs por nombre, luego dividir la matriz en matrices más pequeñas, donde cada sub-matriz contiene las inputs que comienzan con la misma letra.

Además, necesito tener en count una cadena de búsqueda que el usuario puede ingresar.

Mi process general es el siguiente:

  1. Filtre todas las inputs que coincidan con el tipo y la cadena de búsqueda si la hay. Para este paso utilizo un NSPnetworkingicate:

    NSPnetworkingicate *pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"type == %i AND searchableContents B[cd] %@", type, searchString]; if (!searchString || searchString.length == 0) { pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"type == %i", type]; } NSArray *array = [_directoryContents filtenetworkingArrayUsingPnetworkingicate:pnetworkingicate]; 
  2. Ordene los resultados alfabéticamente.

     array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [((BRKDirectoryEntry *)obj1).comperableTitle compare:((BRKDirectoryEntry *)obj2).comperableTitle]; }]; 
  3. Divida los resultados en matrices más pequeñas. Para el performance, omito este paso si estamos buscando, pero parece que no ayuda.

     if(alphabetized) { array = [self _alphabetizedArrayFromPresortedArray:array]; } 

El performance de este en un total de 950 inputs es abismal.

Ahora, para mi pantalla pnetworkingeterminada, puedo salirse con la caching simplemente almacenando los datos orderados en la memory, y luego mostrar y desplazarse funciona muy bien, pero para el tipo de búsqueda como yo, simplemente no hay forma de lograr el buen performance que los usuarios esperan .

¿Alguna sugerencia o consejo?

Sí. Olvida los files y guárdalos en una database. Cree sus índices Todo se convierte en una statement SQL simple.