2014-10-22 35 views
0

所以價值指數我有兩個字典被構造爲這樣:的NSDictionary發現的一個關鍵

{ 
version: "1.0", 
timestamp: 1123, 
data: [ 
    { 
    foo: "0.0026", 
    bar: 548, 
    }, 
    { 
    foo: "0.0065", 
    bar: 341, 
    }, 
], 
revision: 1234 
} 

,因此

{ 
version: "1.0", 
timestamp: 1123, 
data: [ 
    { 
    foo74: "0.0026", 
    bar: 340, 
    }, 
    { 
    foo74: "0.0378", 
    bar: 548, 
    }, 
], 
revision: 2345 
} 

這些在異步從兩個單獨的API調用和加載然後重新加載UITableView。 在每個UITableViewCell我需要匹配bar值來顯示每個單元格中的相關數據。例如:UITableView的索引0將包含bar: 548和foo:"0.0026"但是,在同一個單元格中,我需要包含值foo74,在此例中爲"0.0378"。這意味着我必須通過第二個數據集並找到bar等於548的索引。

我想找到一種方法來做到這一點cellForRowAtIndexPath裏面,而不必遍歷第一個(導致O(n^2)運行時)每個第二個數據條目。

我試過allKeysForObject通過將548的值傳入第二個數據集,它似乎沒有返回任何內容。

我認爲先把它們排序,這會給我稍微更好的運行時間。

我真的只是尋找的東西,這將避免我不得不做這樣的事情:你的表視圖重載

for (int i = 0; i < [[dict2 objectForKey:@"data"] count]; i++) { 
     if(dict1[@"data"][indexPath.row][@"bar"] == dict2[@"data"][i][@"bar"]) 
     { 
      NSLog(@"found"); 
     } 
    } 

回答

0

之前,您應該指數dict2數據到一個的NSDictionary與關鍵「bar」的值和value是你想要得到的數據(在這種情況下是「foo74」的值)。

裏面的cellForRowAtIndexPath方法,請撥打indexDict[dict1[@"data"][indexPath.row][@"bar"]]來查找數據。如果此值爲零,則表示找不到。

索引循環需要O(n)運行時,每次調用查找數據都需要O(1)運行時。

0

有中的一個選項,您可以在如下運行:
你需要轉換dataDict2數據數組字典 like

for (int i = 0;i < [dataArray2 count]; i++) { 

       [newDataDict addEntriesFromDictionary: @{[[dataArray2 objectAtIndex:i]objectForKey:@"bar"] : [[dataArray2 objectAtIndex:i]objectForKey:@"foo74"]}]; 

    } 

    [newDataDict objectForKey:@"548"]; // which will be 0.0378 
0

你可以得到所有按鍵爲[Dic AllKeys]和所有值[Dic AllValues]。然後,您可以編寫所有的密鑰,如[Dic valueForkey:[[Dic AllKeys] objectAtIndex:0]]。通過這種方式,你可以把第一個字典鍵和第二個字典加入。

相關問題