Создание NSDictionary из NSArray (Objective-c 2.0) - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть NSArray, содержащее n элементов с индексами 0, 1 ... n-1. Я хочу заполнить NSDictionary содержимым моего массива.

В частности, словарь должен содержать пары ключ-значение, где ключ - это хэш элемента ih в массиве, а значение - это индекс в массиве.

Например: array = [123, 101, 199], тогда словарь будет содержать три пары ключ-значение:

  • ([123 hash], 0)
  • ([199 hash], 2)
  • ([101 hash], 1)

Я сделал это с помощью цикла for для массива. Какой более краткий способ сделать это? Возможно, что-то из NSKeyValueCoding?

Подробнее : Я думаю о чем-то вроде этого:

NSArray *keys = [myArray valueForKey:@"hash"];
NSArray *values = [myArray valueForKey:@"index"]; // @"index" needs to change
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:values 
                                                       forKeys:keys];

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Я бы, наверное, сам использовал что-то вроде петлевого решения for Дэвида, но только для ударов, и, поскольку я все еще пытаюсь полностью обернуть их вокруг, я придумал решение, используя blocks:

NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:[array count]];

[array enumerateObjectsUsingBlock:^ (id obj, NSUInteger idx, BOOL *stop) {
    [dict setObject:[NSNumber numberWithUnsignedLong:idx] forKey:hashFor(obj)]; } ];

Я предполагаю существование функции hashFor, которая генерирует хэш.Вы можете заменить эту часть сообщением на obj или любым другим, что вы делаете для создания хэша.

1 голос
/ 22 декабря 2011

Цикл for довольно хорош, особенно если вам нужен индекс. В противном случае вы можете использовать быстрое перечисление:

int i = 0;
for (object in array) {
  … [NSNumber numberWithInt: i] … // Add to dict
  i++;
}

Это не имеет ничего общего с KVC.

...