Si nos basamos en el ejemplo que utilizamos en la entrada anterior, podría ser de utilidad conocer que colores de pelo diferentes o que colores de ojos tenemos en nuestra base de datos. Con SQL esto se suele hacer con la clausulas "distinct" o "group by". La clausula distinct ahora mismo está en desuso y si bien no es 100 % equivalente a la clausula group by si que es cierto que los resultados obtenidos son análogos.
En Cocoa, si tienes una base de datos sqlite puedes hacer perfectamente un group by y gestionar los resultados. Sin embargo, hay una forma más sencilla de hacerlo: con Key-value coding (en adelante KVC) que no solo sirve para los objetos de Core Data si no también para arrays de diccionarios y objetos que estén preparados para KVC. Para ello usaremos los operadores de colección.
Un array con el color de pelo de los individuos de nuestra base de datos se obtendría así:
NSArray *coloresDePelo = [arrayDeIndividuos valueForKeyPath:"@distinctUnionOfArrays.colorPelo"];
El arrayDeIndividuos está formado por objetos de tipo Individuo que es un NSManagedObject y que por lo tanto admite KVC. Si el objeto Individuo fuese un diccionario (NSDictionary o NSMutableDictionary) también funcionaría. El operador que hemos usado es @distinctUnionOfArrays.
Una cosa más para que nos den la Matricula de Honor. Es muy posible que el array esté desordenado, para obtener un array con los colores de pelo ordenados alfabéticamente añadiríamos la siguiente instrucción:
NSArray *coloresDePeloOrdenados = [coloresDePelo sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
La documentación de Apple sobre KVC la puedes encontrar aquí. Ahí podrás ver otros operadores de colección.
Si en vez de leer sobre KVC te apetece escuchar, el episodio 21 de 85 % Cocoa hace una excelente introducción.
No hay comentarios:
Publicar un comentario