Ich lese Zeilen aus SQLite-Tabelle, dann dynamisch ein Objekt erstellen und dann das Objekt zu einem NSMutableArray hinzufügen. Mein Problem ist, dass ich nicht in der Lage bin, einen Weg zu finden, die Objekte in dem Array basierend auf dem Distanzattribut dynamisch zu sortieren (was ein Double ist), da ich jedes Objekt zu dem NSMutableArray in einer For-Schleife hinzufüge größten.Wie man ein NSMutableArray in Objective-C dynamisch sortiert?
Mein entsprechenden Code sieht wie folgt aus:
sqlite3 *database;
//Init the restaurant array
restaurants = [[NSMutableArray alloc] init];
CLLocation *firstLocation = [[[CLLocation alloc] initWithLatitude:userLatitude longitude:userLongitude] autorelease];
//Open the database from the users filesystem
if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
//setup the SQL statement and compile it for faster access
const char *sqlStatement = "select * from restaurant";
sqlite3_stmt *compiledStatement;
if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {
//loop through the results and add them to the feeds array
while (sqlite3_step(compiledStatement) == SQLITE_ROW) {
//read the data from the result row
NSString *aName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
NSString *aAddress = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
NSString *aCity = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
NSString *aProvinceState = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 4)];
NSString *aPostalZipCode = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 5)];
NSString *aCountry = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 6)];
NSString *aPhoneNumber = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 7)];
NSString *aHours = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 8)];
double aLat = sqlite3_column_double(compiledStatement, 9);
double aLon = sqlite3_column_double(compiledStatement, 10);
CLLocation *secondLocation = [[[CLLocation alloc] initWithLatitude:aLat longitude:aLon] autorelease];
CLLocationDistance restDistance = [secondLocation distanceFromLocation:firstLocation];
CLLocationDistance distanceKm = restDistance/1000.0;
NSString *aDist = [[NSString alloc] initWithFormat: @"%f", distanceKm];
Restaurant *restaurant = [[Restaurant alloc] initWithName:aName address:aAddress city:aCity provinceState:aProvinceState postalZipCode:aPostalZipCode country:aCountry phoneNumber:aPhoneNumber hours:aHours latitude:aLat longitude:aLon distance:aDist];
//add the restaurant object to the restaurant array
[restaurants addObject:restaurant];
[restaurant release];
}
}
sqlite3_finalize(compiledStatement);
}
sqlite3_close(database);
}
Sobald diese Funktion seinen Lauf beendet hat, sollte die Restaurants Array ein sortiertes Array mit Restaurant Objekte, die in der Reihenfolge der nächsten (kleinster Abstand doppelten Wert) sind am weitesten (größter Abstand, doppelter Wert).
Wie Sie die Objekte in das Array bekommen, ist nicht wichtig, so ist dies wirklich genau die gleiche wie [Wie ein NSMutableArray mit benutzerdefinierten Objekten sortieren?] (Http://stackoverflow.com/questions/805547/how-to-sort-ein-nsmutablearray-with-custom-objects-in-it) –