我可以从一个键值访问 NSDictionary 中的所有值吗?
Posted
技术标签:
【中文标题】我可以从一个键值访问 NSDictionary 中的所有值吗?【英文标题】:Can I access all values in NSDictionary from one value for key? 【发布时间】:2015-03-25 10:14:40 【问题描述】:您可能无法从我的问题中得到正确的理解,因为我什至不知道如何在线表达我的场景。回到我的问题。我有两个网络服务一个给我产品和其他类型的每个产品。
第一个回复:
Json : (
idProducts = 1;
name = Product1;
,
idProducts = 2;
name = Product2;
,
idProducts = 3;
name = Product3;
,
idProducts = 4;
name = product4;
)
第二个响应:
json: (
Name = type1;
"Products_idProducts" = 1;
idProductTypes = 4;
,
Name = type1;
"Products_idProducts" = 2;
idProductTypes = 5;
,
Name = type2;
"Products_idProducts" = 2;
idProductTypes = 6;
,
Name = type3;
"Products_idProducts" = 2;
idProductTypes = 7;
)
主要问题是获取产品类型并使用产品进行设置,如果我能够传递“Product_idProducts”的值,假设 2 它返回我的名称。是否可以 ?如果不是,那么我该如何结合这两个值?
【问题讨论】:
你可以得到一个包含所有值的数组,比如 NSArray *arr = [yourJson valueForKey:@"Product_idProducts"];如果这是你想要的...... 我的回答是否解决了您的问题,还是您需要进一步说明? 【参考方案1】:这很简单,但您必须编写一个方法来处理它,首先在您的第二个响应中创建一个 for in 循环,例如
for (NSDictionary* dict in your.collection)
// get the value of product id using key "Products_idProducts"
NSNumber* productId = dict[@"Products_idProducts"];
// using sort descriptor fetch the product name from your first collection
// also create a dictionary with all the required value and add into mutable array
【讨论】:
【参考方案2】:如果我误解了你的问题,我很抱歉,但据我了解,你可以简单地使用NSPredicate
。看看我为你制作的这个示例代码:
NSArray *products = @[
@
@"idProducts": @1,
@"name": @"Product1"
,
@
@"idProducts": @2,
@"name": @"Product2"
,
@
@"idProducts": @3,
@"name": @"Product3"
,
@
@"idProducts": @4,
@"name": @"Product4"
];
NSArray *types = @[
@
@"Name" : @"type1",
@"Products_idProducts" : @1,
@"idProductTypes" : @4
,
@
@"Name" : @"type2",
@"Products_idProducts" : @2,
@"idProductTypes" : @5
,
@
@"Name" : @"type2",
@"Products_idProducts" : @2,
@"idProductTypes" : @6
,
@
@"Name" : @"type3",
@"Products_idProducts" : @2,
@"idProductTypes" : @7
,
];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idProducts == 2"];
NSArray *filteredArray = [products filteredArrayUsingPredicate:predicate];
NSDictionary *product = filteredArray.firstObject;
NSLog(@"Result: %@", product[@"name"]);
2015-03-25 12:03:05.381 Untitled[14762:956201] Result: Product2
如果这是您想要的,您可以简单地将这个功能包装到一个从产品类型返回产品的方法中。比如:
- (NSDictionary *)productFromProductType:(NSDictionary *)productType
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idProducts == %@", productType[@"Products_idProducts"]];
NSArray *filteredArray = [self.myProductsArray filteredArrayUsingPredicate:predicate];
NSDictionary *product = filteredArray.firstObject;
最好这应该使用枚举作为键或您自己的模型对象以提高类型安全性 - 但这应该可以帮助您入门。
【讨论】:
以上是关于我可以从一个键值访问 NSDictionary 中的所有值吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Objective C 中的 NSDictionary 获取键值?
有没有办法在目标 C 中循环遍历 nsdictionary,其中键值未知且字典深度嵌套
如何从目标 C 中的 NSDictionary 中检索字符串?
在 Objective-C 中使用 JSON 数据的 NSJSONSerialization 读取 NSDictionary 集的键值