What will be my key in NSSortDescriptor - iphone

I want to sort my array in ascending and descending order. For that I have search on Google and thanks to StackOverflow I have got this answer,
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:#"inputtime" ascending:TRUE];
[myMutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
But I dont understand what will be the KEY which is in code inputtime. As you see all the data is provided is in NSMUtableArray and NSArray form than what will be key? I have tried to read apple document but still does not understand what is the key. Plz help me on this. Do i have to create dictionary?

You can use this code to sort array.
It helped me, and for this code thanx to #Anoop Vaidya
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:#"self" ascending:NO];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[yourAry sortedArrayUsingDescriptors:descriptors];

Key is used when your array contain dictionary or Core data objects.
But when your array doesnt have any objects like this and containing simple NSString objects,you just need to use
"self" in place of key. It will surely work for you

Kane I think it will work for you-
NSArray *sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:#"time" ascending:NO]];
[request setSortDescriptors:sortDescriptors];
Here time is the key on basis of which i am fetching data in descending order. You can define a key on the basis of which you have to fetch. If there is no key then put self in place of key.
The Key will be on the basis of which you want to fetch data as in my example time is the key.
Hope this helps.

Related

How to sort NSArray of objects based on one attribute

I am trying to sort an array of managed objects alphabetically. The attribue that they need to be sorted by is the name of the object (NSString) with is one of the managed attributes. Currently I am putting all of the names in an array of strings and then using sortedNameArray = [sortedNameArray sortedArrayUsingSelector:#selector(localizedCaseInsensitiveCompare:)]; and then enumerating them back into an array with the objects. This falls apart when two names are the same so I really need to be able to sort by one attribute. How should I go about doing this?
Use NSSortDescriptor. Just search the documentation on it and there some very simple examples you can copy right over. Here is a simplified example:
NSSortDescriptor *valueDescriptor = [[NSSortDescriptor alloc] initWithKey:#"MyStringVariableName" ascending:YES];
NSArray *descriptors = [NSArray arrayWithObject:valueDescriptor];
NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:descriptors];
And just like that you have a sorted array.
You can do this by using NSSortDescriptor,
eg.
`NSSortDescriptor *valueDescriptor = [[NSSortDescriptor alloc]initWithKey:#"distance" ascending:YES];`
// Here I am sorting on behalf of distance. You should write your own key.
NSArray * descriptors = [NSArray arrayWithObject:valueDescriptor];
NSArray *sortedArray=[yourArray sortedArrayUsingDescriptors:descriptors];`

How can I sort an NSMutableArray alphabetically?

I want to sort an NSMutableArray alphabetically.
You can do this to sort NSMutableArray:
[yourArray sortUsingSelector:#selector(localizedCaseInsensitiveCompare:)];
The other answers provided here mention using #selector(localizedCaseInsensitiveCompare:)
This works great for an array of NSString, however the OP commented that the array contains objects and that sorting should be done according to object.name property.
In this case you should do this:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:#"name" ascending:YES];
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:sort]];
Your objects will be sorted according to the name property of those objects.
NSSortDescriptor *valueDescriptor = [[NSSortDescriptor alloc] initWithKey:#"name" ascending:YES]; // Describe the Key value using which you want to sort.
NSArray * descriptors = [NSArray arrayWithObject:valueDescriptor]; // Add the value of the descriptor to array.
sortedArrayWithName = [yourDataArray sortedArrayUsingDescriptors:descriptors]; // Now Sort the Array using descriptor.
Here you will get the sorted array list.
In the simplest scenarios, if you had an array of strings:
NSArray* data = #[#"Grapes", #"Apples", #"Oranges"];
And you wanted to sort it, you'd simply pass in nil for the key of the descriptor, and call the method i mentioned above:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES];
data = [data sortedArrayUsingDescriptors:#[descriptor]];
The output would look like this:
Apples, Grapes, Oranges
For more details check this
Use the NSSortDescriptor class and rest you will get every thing here
NSSortDescriptor * sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:#"Name_your_key_value" ascending:YES];
NSArray * sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray * sortedArray;
sortedArray = [Your_array sortedArrayUsingDescriptors:sortDescriptors];
Maybe this can help you:
[myNSMutableArray sortUsingDescriptors:#[[NSSortDescriptor sortDescriptorWithKey:#"firstName" ascending:YES],[NSSortDescriptor sortDescriptorWithKey:#"lastName" ascending:YES]]];
All is acording to NSSortDescriptor...

display data in alphabetical order iphone

How to display xml parsed Data in UITableView In alphabetical order.?
In order to display/arrange your data in alphabetical which in a array you have to use NSSortDescriptor
you have to make the object of this NSSortDescriptor class and give data here which you are fetching from XML
NSSortDescriptor *itemXml = [[NSSortDescriptor alloc] initWithKey:#"itemName" ascending:YES];
Now suppose you have an array sortDescriptors
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:itemXml,nil];
[yourArray sortUsingDescriptors:sortDescriptors];
Now give the yourArray to your UITableView delegate methods...... you will get the sorted data on table
NSSortDescriptor *sorter;
sorter = [[NSSortDescriptor alloc]initWithKey:#"Category" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:sorter];
[categoryListArray sortUsingDescriptors:sortDescriptors];
[sorter release];
Try This
Actually there are lots of different ways to sort arrays.
Sort descriptors are only one example.
Others are sortedArrayUsingComparator, sortedArrayUsingFunction:context, sortedArrayUsingSelector, and new to Mac OS 10.6 and iOS 4.0, sortedArrayWithOptions:usingComparator.
Those are NSArray methods that return a sorted array.
NSMutableArray also has variations on those methods that sort the mutable array "in place".

Sort JSON NSDictionary for UITableView

I am using TouchJSON to retrieve info for my app and put it in a dictionary. I would like to be able to sort it by values like difficulty and rating. How would I go about this? I have included my .m file.
Thanks, enbr
http://pastie.org/1091334
You can probably use NSSortDescriptor to sort the array of dictionaries with specified keys. So, for example, the following can sort the array by the key "ratings" in each dictionary:
NSSortDescriptor *ratingsSortDescriptor = [[[NSSortDescriptor alloc] initWithKey:#"ratings" ascending:YES] autorelease];
rows = [rows sortedArrayUsingDescriptors:[NSArray arrayWithObject:ratingsSortDescriptor]];

NSSortdescriptor, finding the path to the key I wish to use for sorting

I am using an NSSortdescriptor to sort a collection of NSArrays, I then came across a case where the particular NSArray to be sorted contains an NSDictionary who contains an NSDictionary.
I would like to sort from the string paired with a key in the last dictionary.
This is how I would reference the string:
NSDictionary *productDict = [MyArray objectAtIndex:index];
NSString *dealerName = [[productDict objectForKey:#"dealer"] objectForKey:#"name"];
How would I use the dealerName in my NSSortdescriptor to sort the array?
NSSortDescriptor * sortDesc = [[NSSortDescriptor alloc] initWithKey:/* ? */ ascending:YES];
sortedDealerArray = [value sortedArrayUsingDescriptors:sortDesc];
[sortDesc release];
Hope someone could help me a bit with how I go about sorting according to keys inside objects inside other objects:)
Thank you.
actually warrenM is right. You can just use keypaths. #"dealer.name" should work for above.