2012-12-04 45 views
0

我有这样的事情:是否有可能将重复键值添加到NSDictionary?

@interface Person : NSObject 
{ 
    NSString *fname; 
    NSString *lname; 
} 

NSString *keys = @"a","a","b","b","b"...."; 
for(NSString *key in keys) 
{ 
    Person *newPerson; //alloc new person 
    [myMutableDictionary setValue:newPerson forKey:key]; 
} 

上面的代码将覆盖使用相同的密钥值,因为NSDictionary中不允许重复键。我怎样才能做到这一点? 我可以通过NSMutableArray完成上述代码,如[array addObject:newPerson];但与NSDictionary相比,获取(Key,value)需要更长的时间?我的数据约有400,000项,关于如何有效地做到这一点的任何想法?我需要加载一次,并做很多提取 - 没有coreData,我试过了,它很慢。

+0

使该值成为可变数组“Person”而不仅仅是一个人。 – Joe

+0

你可以使用不同的密钥?也许结合索引和密钥来创建一个唯一的密钥? (键= a1,a2,b1,b2 ...) –

回答

3

如果您使用NSMutableArray作为密钥,则可以为同一个密钥添加多个Person对象。

NSString *keys = @"a","a","b","b","b", ...; 
for(NSString *key in keys) 
{ 
    Person *newPerson; //alloc new person 
    NSMutableArray *people; 
    if(!(people = [myMutableDictionary objectForKey:key])) 
    { 
     people = [NSMutableArray array]; 
     [myMutableDictionary setValue:people forKey:key]; 
    } 

    [people addObject:newPerson]; 
} 
+0

不错,我会试试看。 – software2007

+0

我接受了这个答案,即使我改变了我的方法。我最终使密钥变得独一无二,并使得这个值成为了一个Array。例如,而不是,(a,val1)(a,val2)..我有(a,{val1,val2})。 – software2007

+1

这不正是我的例子吗? – Joe

相关问题