2013-10-10 150 views
0

我想從我的NSDictionary中給出一個關鍵值並獲取與其關聯的值。 我有這樣的:從nsdictionary獲取值

NSArray *plistContent = [NSArray arrayWithContentsOfURL:file]; 
NSLog(@"array::%@", plistContent); 

dict = [plistContent objectAtIndex:indexPath.row]; 

cell.textLabel.text = [dict objectForKey:@"code"]; 

plistContent

(
     { 
     code = world; 
     key = hello; 
    }, 
     { 
     code = 456; 
     key = 123; 
    }, 
     { 
     code = 1; 
     key = yes; 
    } 
) 

那麼,如何讓 「你好」 給予字典 「世界」?

+0

只是迭代'NSDictionary'並與值「world」比較並找到正確的數據。 – Raptor

+0

有什麼問題?也許plistContent是NSArray,而不是NSDictionary?是你用NSLog記錄給我們的plistContent(@「array ::%@」,plistContent); ? – BergP

+0

@PavelKatunin是的,我怎麼會從「世界」得到「你好」 – BluGeni

回答

2

如果我正確理解你的問題,你想找到「代碼」=「世界」的字典,以獲得「鑰匙」的價值。

如果你想保留的數據結構,因爲它是,那麼你將不得不執行順序搜索,要做到這一點的一種方法很簡單:

NSString *keyValue = nil; 
NSString *searchCode = @"world"; 
for (NSDictionary *dict in plistContents) { 
    if ([[dict objectForKey:@"code"] isEqualToString:searchCode]) { 
     keyValue = [dict objectForKey:@"key"]); // found it! 
     break; 
    } 
} 

但是,如果你這樣做搜索的很多那麼你最好重新組織數據結構,它的字典詞典,鍵入的「代碼」值,將它像這樣:

NSMutableDictionary *dictOfDicts = [[NSMutableDictionary alloc] init]; 
for (NSDictionary *dict in plistContents) { 
    [dictOfDicts setObject:dict 
        forKey:[dict objectForKey:@"code"]]; 
} 

(注意,代碼將打破,如果其中的一個詞典不包含「代碼」條目)。

然後查找是簡單的:

NSDictionary *dict = [dictOfDicts objectForKey:@"world"]); 

這將是「死的快」。

0
- (NSString*) findValueByCode:(NSString*) code inArray:(NSArray*) arr 
{ 
    for(NSDictonary* dict in arr) 
    { 
     if([[dict valueForKey:@"code"] isEqualToString:code]) 
     { 
      return [dict valueForKey:@"key"] 
     } 
    } 

    return nil; 
} 
+0

爲什麼使用鍵值編碼? – trojanfoe