類似的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)。我覺得我忽略了一些非常基本的東西。有任何想法嗎?
謝謝!
快速觀察,你有兩個if語句都返回NSOrderedAscending。 – Justin