2012-04-19 6 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に 'VHS版' それらをする必要があります値をソートします。これは私が探しています正確に何である

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; 
    }]; 
関連する問題