按两个标准对对象数组进行排序?

时间:2010-01-15 13:19:19

标签: objective-c arrays sorting

我有一个对象数组,我想用两个键排序。这些对象可以说类型为学生,而我对我的排序感兴趣的属性是成绩名称

Student
{
    double grade;
    string name;
    ...
} 

我如何先按等级然后按名称对对象进行排序?所以例如,如果我有列表: 汤姆9.9 安德鲁9.8 Chriestie 10 垫9.8 艾莉森10 阿达9.8

排序之后我应该: 艾莉森10 克里斯蒂10 汤姆9.9 阿达9.8 安德鲁9.8 Mat 9.8

而不是 克里斯蒂10 艾莉森10 汤姆9.9 安德鲁9.8 阿达9.8 Mat 9.8

任何指针都非常有用。

3 个答案:

答案 0 :(得分:22)

我对我的客观知识非常了解,但有一些好的指针here并且始终存在documentation。这是我对它的破解......

NSSortDescriptor *gradeSorter = [[NSSortDescriptor alloc] initWithKey:@"grade" ascending:YES];
NSSortDescriptor *nameSorter = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];

[personList sortUsingDescriptors:[NSArray arrayWithObjects:gradeSorter, nameSorter, nil]];

答案 1 :(得分:3)

您基本上需要实施自己的比较器并使用NSArray排序方法之一(例如sortedArrayUsingSelector:

-(NSComparisonResult)compare:(Student *)student {
  // sort by name
  int nameComp = [name compare:student.name];
  if (nameComp != NSOrderedSame) return nameComp;

  // reverse ordered as desired in the question
  if (grade > student.grade)
    return NSOrderedAscending;
  else if (grade == student.grade) // watchout here
    return NSOrderedSame;
  else
    return NSOrderedDescending;
}

NSArray *unsrtedArray = ...
NSArray *sortedArray = [unsortedArray sortedArrayUsingSelector:@selector(compare:)];

答案 2 :(得分:0)

_pScheduleArr:我的下面代码中的数组名称。此数组包含自定义模型对象。我代表日期和字母顺序比较数组。日期也存在于数组(核心数据模型)中的数组中。

_pScheduleArr = [[_pScheduleArr       sortedArrayUsingComparator:^ NSComparisonResult(Meetings * obj1,                                                      会议* obj2){

    NSOrderedSet *personSetObj1 = obj1.timeSlots;
    Timeslot *tt1 = [[personSetObj1 array] objectAtIndex:0];
    NSOrderedSet *personSetObj2 = obj2.timeSlots;
    Timeslot *tt2 = [[personSetObj2 array] objectAtIndex:0];
    NSDate *date11 = tt1.startTime;
    NSDate *date12 = tt2.startTime;

      NSComparisonResult comresult = [date11 compare:date12];
      if (comresult == NSOrderedSame) {
          comresult = [obj1.title compare:obj2.title];
      }
      return comresult;

  }] mutableCopy];
相关问题