2012-07-03 2 views
0

Как я могу прочитать массив, содержащий объекты в этом формате:Чтение NSMutableArray

Second pair: { 
latitude = "26.499023"; 
longitude = "42.326061"; 
} 

??

EDIT:

NO..this is the way I come up with that... 

NSArray *MaparrayLongitude = [dataMap objectForKey:@"longitude"]; 
NSArray *MaparrayLatitude = [dataMap objectForKey:@"latitude"]; 

if (MaparrayLongitude.count != MaparrayLatitude.count) { 
    //Error: Unequal number of longitude/latitude values 
} else { 
    NSMutableArray *pairs = [NSMutableArray array]; 
    for (int i = 0; i < MaparrayLongitude.count; i++) { 
     NSDictionary *pair = [NSDictionary dictionaryWithObjectsAndKeys: 
           [MaparrayLongitude objectAtIndex:i], @"longitude", 
           [MaparrayLatitude objectAtIndex:i], @"latitude", nil]; 
     [pairs addObject:pair]; 
+0

Array? Похож на хэшмап. – TheZ

ответ

3

Ответ, который я подозреваю, что вы ищете, называется NSDictionary. Я пришел из PHP, где мы назвали его массивом, если он был либо численно проиндексирован, либо связан с строками; в Objective-C, есть 3 основных вида коллекций:

NSArray - упорядоченное, натуральные числа как индексы

NSSet - неупорядоченная коллекция, одного членства

NSDictionary - ключ на одном из нескольких видов объекты, обычно строки.

Here is apple's docs

Edit: для справки, вот что ваш код может в конечном итоге, как:

double myLat = [[secondPair objectForKey:@"latitude"] doubleValue]; 

EDIT (после редактирования): Возможно, это быстро перечисление, в сочетании со словарем доступа что вы ищете:

for (NSDictionary *coordinate in pairs) { 
    // lat = [coordinate [email protected]"latitude"]; 
} 
+0

См. Редактирование ответа – Alessandro

+0

, я надеюсь, что следую вашему смыслу. –

1

Ну, это просто структура данных с двумя значениями с плавающей точкой, так что я предпочитаю

[NSValue valueWithCGPoint:CGPointMake(26.499023, 42.326061)]; 

и хранить его в массиве. А для получения значения, вы можете сделать так:

CGPoint coordinate = [[array objectAtIndex:index] CGPointValue]; 

Вы также можете задать имя для CGPoint как

typedef CGPoint YourCustomNameForPoint; 

затем использовать его как

YourCustomNameForPoint coordinate = [[array objectAtIndex:index] CGPointValue]; 

It» Тогда не путайте. ;)

+1

Это хороший вариант. Но я, вероятно, предпочел бы создать собственный класс под названием: PointMutableArray, который будет оберткой вокруг массива C, выделенного в куче, которая будет содержать точки непосредственно. Это позволит избежать вызова NSValue. –

+0

@VinceBurn +1 для массива C! – Kjuly