在iOS中将nsarray转换为nsmutablearray的词典?

时间:2014-12-05 10:57:37

标签: ios iphone ipad nsmutablearray nsmutabledictionary

我有一个IPhone应用程序,其中我有一个元素数组,但我需要字典中的每个元素,即。 (nsmuatblearray of dictionaries),我确实喜欢这个但有时它会给出一些不必要的结果 `

id objectInstance;
    NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
    for (objectInstance in self.SelectedContacts)
        [mutableDictionary setObject:objectInstance forKey:@"tag"];
         [finalarray addObject:mutableDictionary];

` 我这样做可以有人指出我哪里出错了吗?

4 个答案:

答案 0 :(得分:2)

你这样做的方式是覆盖键#34;标签"的元素。每次。我不完全确定你想要完成什么,但我怀疑你应该写一些类似的东西:

for (id objectInstance in self.SelectedContacts) {
    NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc] init];
    [mutableDictionary setObject:objectInstance forKey:@"tag"];
    [finalarray addObject:mutableDictionary];
}

答案 1 :(得分:1)

在循环中,您将不同的对象放在相同的标记名称" tag"中。所以这里只保存最后一个objectInstance,其余的全部由下一个替换。

如果您希望保存其中的每一个,请更新您的"标记"使用新的标记名称。

另一件事是,您错过了在上面的代码中显示{,或者您确实没有那些大括号{} for然后只有下一行被循环占用,[finalarray addObject:mutableDictionary];被执行一次!!!

答案 2 :(得分:0)

这里不需要创建NSMutableDictionary,因为你只是用它来保存在数组中,没有进一步的修改。

此外,它会消耗比NSDictionary更多的内存。将来,如果您想更新字典中的对象,可以使用

NSDictionary转换为NSMutableDictionary
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithDictionary:object];

,反之亦然NSDictionary

现在是一种在数组中添加字典的简单方法:

NSMutableArray *finalArray = [NSMutableArray new];
for (NSDictionary *object in self.SelectedContacts) {
    [finalArray addObject:@{ @"tag" : object }];
}

答案 3 :(得分:0)

如果你想要一个每个都有相同键的字典数组,或者一个包含1个字典的数组,你的问题不是100%肯定。

许多字典版本

for (long i = 0; i < [self.SelectedContacts count];i++)
{
    NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];
    [mutableDictionary setObject:[self.SelectedContacts objectAtIndex:i] forKey:@"tag"];
    [finalarray addObject:mutableDictionary];
}

1字典版

NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionary];

for (long i = 0; i < [self.SelectedContacts count];i++)
{
    NSString *keyString = [NSString stringWithFormat:@"tag_%li",i];
    [mutableDictionary setObject:[self.SelectedContacts objectAtIndex:i] forKey:keyString];
}

[finalarray addObject:mutableDictionary];

在这个1字典版本中,标签将是tag_,后跟数组中的旧索引值。

TAG_0 TAG_1 等