我可以从一个键值访问 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 中的所有值吗?的主要内容,如果未能解决你的问题,请参考以下文章

从给定键值对的字典数组中过滤 NSDictionary

如何从 Objective C 中的 NSDictionary 获取键值?

我无法从 plist 键值中解包值

有没有办法在目标 C 中循环遍历 nsdictionary,其中键值未知且字典深度嵌套

如何从目标 C 中的 NSDictionary 中检索字符串?

在 Objective-C 中使用 JSON 数据的 NSJSONSerialization 读取 NSDictionary 集的键值