2012-12-04 75 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

相關問題