2013-08-19 19 views
0

類似的noob問題也許:我試圖排序nsmutablearray,但不知何故順序沒有被存儲。排序nsmutable數組 - >訂單沒有被保存?

typedef struct { 
     float distance; 
     int index; 
    } DistanceAndIndex; 
    i = 0; 
    NSMutableArray *orderedDistances = [NSMutableArray arrayWithCapacity:(self.wayPoints.count)]; 
CLLocation* rwp2 = [[CLLocation alloc] initWithLatitude:52.080752 longitude:4.7527251]; 
     latLonToEcef(rwp2.coordinate.latitude, rwp2.coordinate.longitude, 0.0, &myX, &myY, &myZ); 

     for (routeWayPoint *rwp in [[self wayPoints] objectEnumerator]) { 
      double poiX, poiY, poiZ, e, n, u; 


      latLonToEcef(rwp.location.coordinate.latitude, rwp.location.coordinate.longitude, 0.0, &poiX, &poiY, &poiZ); 
      ecefToEnu(rwp2.coordinate.latitude, rwp2.coordinate.longitude, myX, myY, myZ, poiX, poiY, poiZ, &e, &n, &u); 

      DistanceAndIndex distanceAndIndex; 
      distanceAndIndex.distance = sqrtf(n*n + e*e); 
      distanceAndIndex.index = i; 

      NSLog(@"Index = %i, %f", i, distanceAndIndex.distance); 
      [orderedDistances insertObject:[NSData dataWithBytes:&distanceAndIndex length:sizeof(distanceAndIndex)] atIndex:i++]; 
     } 
     i=0; 


     [orderedDistances sortUsingComparator:(NSComparator)^(NSData *a, NSData *b) { 
      const DistanceAndIndex *aData = (const DistanceAndIndex *)a.bytes; 
      const DistanceAndIndex *bData = (const DistanceAndIndex *)b.bytes; 


      if (aData->distance < bData->distance) { 
       return NSOrderedAscending; 
      } else if (aData->distance > bData->distance) { 
       return NSOrderedAscending; 
      } else { 
       return NSOrderedSame; 
      } 
     }]; 


     for (NSData *d in [orderedDistances reverseObjectEnumerator]) { 
      const DistanceAndIndex *distanceAndIndex = (const DistanceAndIndex *)d.bytes;   
      NSLog(@"item: %i, %f", distanceAndIndex->index, distanceAndIndex->distance); 
     } 

的輸出是下面的:

[2021:907]路標:8 [2021:907]索引= 0,230.078827

[2021:907]索引= 1,171.626389

[2021:907]索引= 2,36.015743

[2021:907]索引= 3,103.174805

[2021:907]索引= 4,238.837616

[2021:907]指數= 5,278.074371

[2021:907]指數= 6,288.319763

[2021:907]索引= 7,321.953156

[2021:907]項:7,321.953156

[2021:907]項:6,288.319763

[2021:907]項:5,278.074371

[2021:907]項:4,238.837616

[2021:907]項:3,103.174805

[2021:907]項:2,36.015743

[2021:907 ]項:1,171.626389

[2021:907]項:0,230.078827

陣列根本沒有被重新排序(在尋找項目1,2和當例如3)。我覺得我忽略了一些非常基本的東西。有任何想法嗎?

謝謝!

+0

快速觀察,你有兩個if語句都返回NSOrderedAscending。 – Justin

回答

3

你似乎是俯瞰這座錯字:

 if (aData->distance < bData->distance) { 
      return NSOrderedAscending; 
     } else if (aData->distance > bData->distance) { 
      return NSOrderedAscending; 
     } else { 
      return NSOrderedSame; 
     } 

第二個應該是NSOrderedDescending,我想。

+0

PFF,談論被codeblind :-)感謝您的協助! – Salmiak

1

你似乎有兩個if語句,都返回NSOrderedAscending