了解枚举

时间:2011-05-03 22:54:57

标签: iphone nsarray enumeration cllocationmanager

有人可以填写此枚举行的其余部分吗?没有例子,我根本不理解枚举。我正在尝试按离用户最近的距离排列表格视图。下面的代码是纬度部分,它试图通过数据的plist枚举(索引4处的对象是存储为NSNumber的纬度,clubLocation和myLocation是分别返回地点和用户的位置的方法)。枚举如何工作以及它返回什么?数组?如何将数组结果与plist的其他部分同步,如位置名称?非常感谢。

-(NSArray *)distanceFromLat
{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Data3" ofType:@"plist"];
    NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

    NSMutableArray *latitudeArray = [[NSMutableArray alloc] init];
    latitudeArray = [[tempDictionary objectForKey:@"Subtree"]objectAtIndex:4];

    NSEnumerator *enumLat = [latitudeArray objectEnumerator];
    id object;

    while ((object = [enumLat nextObject])) {
        [myLocation distanceFromLocation:clubLocation];
    }

}

1 个答案:

答案 0 :(得分:1)

为什么不使用“快速枚举”?

for (id latitude in latitudeArray) {
..
}

您可以将id替换为数组中纬度对象的实际类型。根据你的意见,这将是NSNumber。

NSEnumerator枚举样式的工作方式相同。循环中的每个对象都是数组中的一个对象,枚举数组以便它包含的每个对象都被访问一次。 “快速枚举”更好,因为它实际上更快,从概念上来说很容易看出发生了什么 - “对于所有x in y”。

要根据用户对表格显示的距离对纬度进行排序,您可以创建一个可变字典,其中的密钥由距用户(NSNumber)的距离和一个对象组成,该对象是该纬度的索引。您的latitudeArrayNSNumber)。然后在该字典上使用allKeys来获取所有NSNumber密钥的数组,使用sortedArrayUsingSelector:@selector(compare:)对其进行排序,并且显示很简单 - 第一个表条目将通过获取排序数组中的第一个键来获得,获取它在字典中键入的索引,然后使用该索引从latitudeArray中检索正确的纬度。

相关问题