uitableview ios:基于计算的距离排序数组而不是数组的一部分

时间:2012-09-16 01:17:28

标签: ios sorting nsarray

我在地图上有一系列点数。 我正确填充数组,并在地图上为它们进行注释。一切都很好。 我有另一个具有相同数组的tableview,在单元格的“副标题”中,我计算到用户和现在的距离。一切正常。

现在,我想在表格视图中对列表进行排序,换句话说,我想按距离排序相同的数组,从最低到最高。

事情是距离不是数组的一部分。那么我如何交叉匹配数组的距离,这样当我对距离进行排序时,它会在数组中使用它的归属对象并对数组进行排序?

我对ios相当新,但我现在已经设法发布了3个应用程序,这个是第四个,更复杂,我认为我已经覆盖了相当不错的应用程序到目前为止。从mapview,到带有搜索控制器和一切的tableview。我只是错过了排序。

我想我需要为数组中的每个对象添加一些标记或属性,并将其分配给距离数组中的每个距离。 任何建议,将不胜感激 :) 提前谢谢。

2 个答案:

答案 0 :(得分:3)

// Assuming you have your points on the map in an NSArray called
// pointsOnMapArray and your distances in distanceArray, create a
// new mutable array to hold both.  Note, the "distances" in this
// case are stored as NSStrings.  We'll want to convert them to
// doubles before sorting them.
NSMutableArray *newArray = [[NSMutableArray alloc] init];

// Iterate over all of the points, and add a new element to the mutable
// array which is a new array containing a point and its distance.  The
// distance is converted from an NSString to an NSNumber containing a
// doubleValue.
int i;   
for (i = 0; i < pointsOnMapArray.count; i++) {
    NSArray *newItem = [NSArray arrayWithObjects: [pointsOnMapArray objectAtIndex: i], [NSNumber numberWithDouble:[[distanceArray objectAtIndex: i] doubleValue]], nil];
    [newArray addObject: newItem];
}

// Now, sort the new array based upon the distance in the second element
// of each array (ie, the distance).
[newArray sortUsingComparator: ^(id obj1, id obj2) {
    NSNumber *dist1 = [obj1 objectAtIndex:1];
    NSNumber *dist2 = [obj2 objectAtIndex:1];

    return [dist1 compare:dist2];
}];

答案 1 :(得分:1)

尝试制作一个包含距离和数组元素的字典。然后通过对距离进行排序,可以相应地对数组元素进行排序。

NSMutableDictionary *dict=[[NSMutableDictionary alloc]init];
[dict setObject:(array element) forKey:(correspondingDistance)];

现在通过对键进行排序,您可以相应地对数组的元素进行排序。