2014-10-22 34 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]]。通过这种方式,你可以把第一个字典键和第二个字典加入。

相关问题