Помогите с циклом For и NSMutableDictionary - PullRequest
0 голосов
/ 07 марта 2011

Я использую цикл for (в настоящее время) NSLog содержимое NSArray.Однако я хотел бы установить содержимое массива в NSMutableDictionary, в зависимости от objectAtIndex это.В настоящее время в массиве находится 843 объекта, и поэтому я бы предпочел не набирать одно и то же снова и снова!

Мой код в настоящее время такой:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSArray *chunks = [string componentsSeparatedByString:@","];
for (int i = 0; i < [chunks count]; i ++) {
    NSLog(@"%@", [chunks objectAtIndex:i]);
}

Я хотел бычтобы установить содержимое массива в NSMutableDictionary следующим образом, и когда objectAtIndex равен 11, я хотел бы установить 12-й объект в словаре, имеющий ключ @ "type" и soforth:

[dict setObject:[chunks objectAtIndex:0] forKey:@"type"];
[dict setObject:[chunks objectAtIndex:1] forKey:@"name"];
[dict setObject:[chunks objectAtIndex:2] forKey:@"street"];
[dict setObject:[chunks objectAtIndex:3] forKey:@"address1"];
[dict setObject:[chunks objectAtIndex:4] forKey:@"address2"];
[dict setObject:[chunks objectAtIndex:5] forKey:@"town"];
[dict setObject:[chunks objectAtIndex:6] forKey:@"county"];
[dict setObject:[chunks objectAtIndex:7] forKey:@"postcode"];
[dict setObject:[chunks objectAtIndex:8] forKey:@"number"];
[dict setObject:[chunks objectAtIndex:9] forKey:@"coffee club"];
[dict setObject:[chunks objectAtIndex:10] forKey:@"latitude"];
[dict setObject:[chunks objectAtIndex:11] forKey:@"longitude"];

Ответы [ 4 ]

1 голос
/ 07 марта 2011

Я не уверен, что полностью понимаю вопрос, но я думаю, что ваш массив chunks содержит длинный список данных, упорядоченный таким же образом (т. Е. 0-й, 12-й, 24-й, 36-й ... элементы - это всеtype, а 1-й, 13-й, 25-й, 37-й ... элементы - все name).Если это так, вы можете использовать что-то вроде этого:

NSArray *keys = [NSArray arrayWithObjects:@"type", @"name", @"street", @"address1", @"address2", @"town", @"county", @"postcode", @"number", @"coffee club", @"latitude", @"longitude", nil];

for (NSUInteger i = 0; i < [chunks count]; i += [keys count])
{
    NSArray *subarray = [chunks subarrayWithRange:NSMakeRange(i, [keys count])];
    NSDictionary *dict = [[NSDictionary alloc] initWithObjects:subarray forKeys:keys];

    // do something with dict

    [dict release];
}

Обратите внимание, что вы не можете иметь два разных значения для одного и того же ключа с NSDictionary.То есть, если вы установите два разных значения для клавиши type, будет сохраняться только последнее установленное значение.

Редактировать

Если ваш массив не кратен 12, потому что, например,в конце он содержит мусорные данные, вместо этого вы можете использовать другой стиль зацикливания:

// max should be a multiple of 12 (number of elements in keys array)
NSUInteger max = [chunks count] - ([chunks count] % [keys count]);
NSUInteger i = 0;

while (i < max)
{
    NSArray *subarray = [chunks subarrayWithRange:NSMakeRange(i, [keys count])];
    NSDictionary *dict = [[NSDictionary alloc] initWithObjects:subarray forKeys:keys];

    // do something with dict

    [dict release];

    i += [keys count];
}
0 голосов
/ 07 марта 2011

Самое простое, что можно сделать, это использовать опубликованный вами код.Но если вы действительно хотите использовать цикл, нужно сделать что-то подобное.

NSArray *keys = [NSArray arrayWithObjects:@"type", @"name", @"street", @"address1", @"address2", @"town", @"county", @"postcode", @"number", @"coffee club", @"latitude", @"longitude", nil];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSArray *chunks = [string componentsSeparatedByString:@","];
for (int i = 0; i < [chunks count] && i < [keys count]; i ++) {
    [dict setObject:[chunks objectAtIndex:i] forKey:[keys objectAtIndex:i]];
}
0 голосов
/ 07 марта 2011
NSArray* keys = [NSArray arrayWithObjects:@"type",@"name",@"street",@"address1",@"address2",@"town",@"county",@"postcode",@"number",@"coffee club",@"latitude",@"longitude",nil];

    for (int i = 0; i < [chunks count]; i ++){
        [dict setObject:[chucks objectAtIndex:i] forKey:[keys objectAtIndex:i]]; 
    }
0 голосов
/ 07 марта 2011

Поскольку у ваших клавиш нет шаблона, лучше делать это вручную, как сейчас.

...