2011-01-05 4 views
6

У меня есть NSMutableDictionary, каждый элемент которого является другим словарем. Каким образом я могу скопировать его содержимое в другое NSMutableDictionary? Я попытался использовать:Копирование содержимого NSMutableDictionary в другой NSMutableDictionary?

firstDictionary = [NSMutableDictionary dictionaryWithDictionary:secondDictionary]; 

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

+0

Как минимум, это более наглядно. Почему вы думаете, что это не самое лучшее? Вам нужна глубокая или мелкая копия элементов? – Schultz9999

+0

Мне нужна глубокая копия элементов. – NSExplorer

+0

Deep copy означает, что вы должны сделать копию каждого отдельного поля каждого элемента (что в свою очередь означает полные поля полей полей и т. Д.). Эта функциональность не предоставляется ни одним классом коллекции. Вы должны сами позаботиться об этом. – Schultz9999

ответ

5

Проверьте метод NSDictionary initWithDictionary:copyItems:.

Это позволяет осуществлять глубокое копирование элементов посредством вызова copyWithZone: метод класса предмета. Вам придется позаботиться о том, чтобы копировать поля самостоятельно в рамках метода.

0

Что вы подразумеваете под "лучшим"?
Во всяком случае, я перечислил несколько способов здесь:

  1. firstDictionary = [NSMutableDictionary dictionaryWithDictionary: secondDictionary];
  2. [[NSDictionary alloc] initWithDictionary: secondDictionary]; // не забудьте выпустить позже
  3. с использованием глубокой копии
  4. используя неполную копию
10

Вы также можете прыгать между изменяемыми и непеременными словарями, используя copy и mutableCopy.

- (void) someFunc:(NSMutableDictionary *)myDict { 
    NSDictionary *anotherDict = [myDict copy]; 
    NSMutableDictionary *yetAnotherDict = [anotherDict mutableCopy]; 
} 
0

Соответствует протоколу NSCopying и выполняет копирование с каждого объекта.

Если NsMutableDictionary содержит другой словарь, который содержит другой словарь, тогда вам нужно сделать copyWithZone для каждого словаря на всех уровнях.