2012-04-10 9 views
5

me tienen sin clasificar gama diccionario y que desea ordenar de acuerdo a la lista artista names.Unsorted se dan a continuación:¿Cómo ordenar NSArray con objetos de diccionario alfabéticamente?

  { 
       artist = "Afro Latin Jazz Orchestra"; 
       id = 10; 
      }, 
        { 
       artist = "Avey, Bobby"; 
       id = 17; 
      }, 
        { 
       artist = "American Symphony Orchestra"; 
       id = 32; 
      }, 
        { 
       artist = "Akpan, Uwem"; 
       id = 97; 
      }, 
        { 
       artist = "Austin, Ivy "; 
       id = 123; 
      }, 
        { 
       artist = "American Theatre Orchestra"; 
       id = 153; 
      }, 
        { 
       artist = AudraRox; 
       id = 171; 
      }, 
        { 
       artist = "Atlas, James"; 
       id = 224; 
      }, 
        { 
       artist = "Alden, Howard"; 
       id = 270; 
      }, 
        { 
       artist = Astrograss; 
       id = 307; 
      }, 
        { 
       artist = "Adan, Victor"; 
       id = 315; 
      }, 
        { 
       artist = "Alegria, Gabriel"; 
       id = 316; 
      }, 
        { 
       artist = "Andersen, Kurt"; 
       id = 412; 
      }, 
        { 
       artist = Antares; 
       id = 420; 
      }, 
        { 
       artist = "Austen, Jane "; 
       id = 426; 
      }, 
        { 
       artist = "Acuna, Claudia"; 
       id = 443; 
      }, 
        { 
       artist = "Akinmusire, Ambrose"; 
       id = 444; 
      }, 
        { 
       artist = "Anderson, Laurie Halse"; 
       id = 559; 
      }, 
        { 
       artist = "Alvarez, Javier"; 
       id = 591; 
      }, 
        { 
       artist = "Alexander, Jane"; 
       id = 674; 
      }, 
        { 
       artist = "Andy Teirstein"; 
       id = 695; 
      }, 
        { 
       artist = "Afro-Cuban Jazz Saxtet"; 
       id = 707; 
      }, 
        { 
       artist = "Aurora "; 
       id = 708; 
      }, 
        { 
       artist = "Aurora "; 
       id = 709; 
      }, 
        { 
       artist = "August, Gregg "; 
       id = 715; 
      }, 
        { 
       artist = "Aldous, Brian"; 
       id = 777; 
      }, 
        { 
       artist = "Anne Enright"; 
       id = 1130; 
      } 

Y después de su clasificación utilizando descriptor

NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"artist" ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName]; 
sortedArray = [artistArray sortedArrayUsingDescriptors:sortDescriptors]; 

que da como matriz ordenada

 { 
      artist = "Acuna, Claudia"; 
      id = 443; 
     }, 
      { 
      artist = "Adan, Victor"; 
      id = 315; 
     }, 
      { 
      artist = "Afro Latin Jazz Orchestra"; 
      id = 10; 
     }, 
      { 
      artist = "Afro-Cuban Jazz Saxtet"; 
      id = 707; 
     }, 
      { 
      artist = "Akinmusire, Ambrose"; 
      id = 444; 
     }, 
      { 
      artist = "Akpan, Uwem"; 
      id = 97; 
     }, 
      { 
      artist = "Alden, Howard"; 
      id = 270; 
     }, 
      { 
      artist = "Aldous, Brian"; 
      id = 777; 
     }, 
      { 
      artist = "Alegria, Gabriel"; 
      id = 316; 
     }, 
      { 
      artist = "Alexander, Jane"; 
      id = 674; 
     }, 
      { 
      artist = "Alvarez, Javier"; 
      id = 591; 
     }, 
      { 
      artist = "American Symphony Orchestra"; 
      id = 32; 
     }, 
      { 
      artist = "American Theatre Orchestra"; 
      id = 153; 
     }, 
      { 
      artist = "Andersen, Kurt"; 
      id = 412; 
     }, 
      { 
      artist = "Anderson, Laurie Halse"; 
      id = 559; 
     }, 
      { 
      artist = "Andy Teirstein"; 
      id = 695; 
     }, 
      { 
      artist = "Anne Enright"; 
      id = 1130; 
     }, 
      { 
      artist = Antares; 
      id = 420; 
     }, 
      { 
      artist = Astrograss; 
      id = 307; 
     }, 
      { 
      artist = "Atlas, James"; 
      id = 224; 
     }, 
      { 
      artist = AudraRox; 
      id = 171; 
     }, 
      { 
      artist = "August, Gregg "; 
      id = 715; 
     }, 
      { 
      artist = "Aurora "; 
      id = 708; 
     }, 
      { 
      artist = "Aurora "; 
      id = 709; 
     }, 
      { 
      artist = "Austen, Jane "; 
      id = 426; 
     }, 
      { 
      artist = "Austin, Ivy "; 
      id = 123; 
     }, 
      { 
      artist = "Avey, Bobby"; 
      id = 17; 
     } 

Pero todavía no está ordenada por completo. Alguna idea de cómo puedo ordenarlo alfabéticamente usando el nombre del artista. ¡Ayúdame por favor!

+5

¿Cuál es el problema con la clasificación? Los resultados que muestra están en orden? ¿En qué orden esperas que estén? –

+0

posible duplicado de [¿Cómo puedo ordenar un NSArray que contenga NSDictionaries?] (Http://stackoverflow.com/questions/3361207/how-can-i-sort-an-nsarray-containing-nsdictionaries) –

+0

¿Es su problema específico que el tipo es sensible a las mayúsculas y minúsculas? Si es así, quiere '' [NSSortDescriptor sortDescriptorWithKey: @ "artist" ascendente: YES selector: @selector (caseInsensitiveCompare :)] '. – Dondragmer

Respuesta

-1

El uso de las teclas de ajuste de bucle para cada valores diccionarios de este tipo

for(int i =0;i<[Arr count];i++) 
{ 
    [dict setValue:[Arr objectAtIndex:i] forKey:[[Arr objectAtIndex:i] valueForKey:artist]]; 
} 

ahora obtendrá como esto

Acuna, Claudia = { 
    artist = "Acuna, Claudia"; 
    id = 443; 
}  
Adan, Victor = { 
    artist = "Adan, Victor"; 
    id = 315; 
}  
Afro Latin Jazz Orchestra = { 
    artist = "Afro Latin Jazz Orchestra"; 
    id = 10; 
}  
Afro-Cuban Jazz Saxtet { 
    artist = "Afro-Cuban Jazz Saxtet"; 
    id = 707; 
}  
Akinmusire, Ambrose = { 
    artist = "Akinmusire, Ambrose"; 
    id = 444; 
}  

NSArray *KeyArr = [dict allKeys]; 

[KeyArr sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

teclas Ahora va a solucionarse en conjunto, Utilizando esta matriz puede obtener el dictionart ordenado mediante el uso de claves clasificadas en alphapet

for(int i= 0;i<[dict count];i++) 
{ 
    NSLog("Test val:%@",[dict valueForKay:[keyArr objectAtIndex:i]]); 
} 

Finalmente obtendrá lo que está buscando ahora ... disfrute de esta codificación ..
Si tiene alguna duda, no dude en preguntar ..

+0

Esto no funcionará realmente, porque la versión ordenada de 'KeyArr' se descarta. Puede almacenarlo usando 'KeyArr = [KeyArr sortedArrayUsingSelector: @selector (caseInsensitiveCompare :)];'. Sin embargo, esto sería menos eficiente que ordenar el arreglo existente usando la tecla "artista" y el selector 'caseInsensitiveCompare:', si eso es lo que necesita el OP. – Dondragmer

Cuestiones relacionadas