【问题标题】:iOS: Sorting NSArray of NSValue wrapping CGPointiOS:对包装 CGPoint 的 NSValue 的 NSArray 进行排序
【发布时间】:2012-04-19 15:17:52
【问题描述】:

问题:和标题中的差不多。我查看了互联网,但找不到任何易于理解的内容。我有NSArray,其中包含许多NSValue。那些NSValue 每个都有一个CGPoint。我想按x 对它们进行排序,然后按y 秒。

一些代码

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

【问题讨论】:

    标签: ios sorting nsarray cgpoint nsvalue


    【解决方案1】:

    要对值进行排序,您必须再次将它们“拆箱”到 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;
        }];
    

    【讨论】:

      【解决方案2】:
          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;
          }];
      

      【讨论】:

        猜你喜欢
        • 2013-04-18
        • 1970-01-01
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 2011-06-01
        相关资源
        最近更新 更多