2012-04-19 5 views
3

Qeustion : 제목과 거의 같습니다. 나는 인터넷을 보았지만 이해하기 쉬운 것을 찾을 수 없다. 많은 NSValue을 포함하는 NSArray이 있습니다. 각각 NSValueCGPoint입니다. 나는 그들을 x 다음으로 y 초로 정렬하고 싶습니다.iOS : NSValue 배치 NSArray 정렬 CGPoint

일부 코드 :

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

답변

9

다시 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; 
    }];