Я пытаюсь сортировать массив, который будет выглядеть примерно так: (пожалуйста, игнорировать тот факт, что эти люди хорошо мимо любого живого возраста мне просто нужно было больших чисел!)Сортировка NSArray путем NSDictionary значения
NSDictionary *person1 = [NSDictionary dictionaryWithObjectsAndKeys:@"sam",@"name",@"28.00",@"age",nil];
NSDictionary *person2 = [NSDictionary dictionaryWithObjectsAndKeys:@"cody",@"name",@"100.00",@"age",nil];
NSDictionary *person3 = [NSDictionary dictionaryWithObjectsAndKeys:@"marvin",@"name",@"299.00",@"age",nil];
NSDictionary *person4 = [NSDictionary dictionaryWithObjectsAndKeys:@"billy",@"name",@"0.0",@"age",nil];
NSDictionary *person5 = [NSDictionary dictionaryWithObjectsAndKeys:@"tammy",@"name",@"54.00",@"age",nil];
NSMutableArray *arr = [[NSMutableArray alloc] initWithObjects:person1,person2,person3,person4,person5,nil];
// before sort
NSLog(@"%@",arr);
NSSortDescriptor *ageSorter = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
[arr sortUsingDescriptors:[NSArray arrayWithObject:ageSorter]];
// after sort
NSLog(@"%@",arr);
Теперь перед сортировать результат будет:
2010-07-21 10:46:31.898 Sorting[70673:207] (
{
age = "28.00";
name = sam;
},
{
age = "100.00";
name = cody;
},
{
age = "299.00";
name = marvin;
},
{
age = "0.0";
name = billy;
},
{
age = "54.00";
name = tammy;
}
)
и после сортировки:
2010-07-21 10:46:31.900 Sorting[70673:207] (
{
age = "0.0";
name = billy;
},
{
age = "100.00";
name = cody;
},
{
age = "28.00";
name = sam;
},
{
age = "299.00";
name = marvin;
},
{
age = "54.00";
name = tammy;
}
)
Как вы можете видеть это разбирайтесь, но из моего понимания это сортировка по строке. Я пробовал, но после нескольких дней неудачи попытки написать метод, который сортировал бы это для меня, я все еще в растерянности. Какой был бы лучший подход и выполнение этого, чтобы он сортировал по числовому значению?
Почему дону Вы сохраняете возраст как число? [Номер NSNumberWithFloat: 28.0f]; – Gobra
Потому что фактический скрипт im работает с вытягивается с помощью JSON, поэтому он приходит как строковый объект, иначе я бы :) – cdnicoll