简体   繁体   中英

How to sort NSArray with dictionary objects alphabetically?

I have unsorted dictionary array and I want to sort it according to artist names.Unsorted list are given below:

            {
                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;
            }

And after sorting using descriptor

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

it gives sorted array as

        {
            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;
        }

But still it is not sorted completely. Any idea how can I sort it alphabetically using artist name.Help me please!

Using for loop set keys for every dictionaries values like this

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

now you'll get like this

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:)];

Now you'll get sorted keys in array, Using this array you can get sorted dictionart by using sorted keys in alphapet

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

Finally you'll get what you are seeking now.. enjoy this coding..
If you have any doubt feel free to ask..

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM