2012-04-19 6 views
3

Qeustion: В значительной степени, как указано в названии. Я просмотрел интернет, но не могу найти ничего, что легко понять. У меня NSArray, которая содержит много NSValue. Эти NSValue держат CGPoint. Я хочу отсортировать их по: x, затем y секунд.iOS: Сортировка NSArray упаковки NSValue CGPoint

Некоторый код:

NSValue * valuePointObject = [NSValue valueWithCGPoint:CGPointMake(x, y)]; 
NSArray *array = [[NSArray alloc] initWithObjects: valuePointObject, valuePointObject2, ..., nil]; 

ответ

9

Для сортировки значений вы должны 'Unbox' их CGPoints снова. Код может быть как:

NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(NSValue *obj1, NSValue *obj2) { 
     CGPoint p1 = [obj1 CGPointValue]; 
     CGPoint p2 = [obj2 CGPointValue]; 
     if (p1.x == p2.x) return p1.y < p2.y; 
     return p1.x < p2.x; 
    }]; 
+0

Это именно то, что я ищу. Отличный код. Благодаря! – Byte

4
array = [array sortedArrayUsingComparator:^NSComparisonResult(NSValue *obj1, NSValue *obj2) { 

     if (obj1.CGPointValue.x < obj2.CGPointValue.x) { 
      return NSOrderedAscending; 
     } 

     if (obj1.CGPointValue.x > obj2.CGPointValue.x) { 
      return NSOrderedDescending; 
     } 

     if (obj1.CGPointValue.y < obj2.CGPointValue.y) { 
      return NSOrderedAscending; 
     } 

     if (obj1.CGPointValue.y > obj2.CGPointValue.y) { 
      return NSOrderedDescending; 
     } 

     return NSOrderedSame; 
    }]; 

 Смежные вопросы

  • Нет связанных вопросов^_^