【问题标题】:NSDictionary to NSArray?NSDictionary 到 NSArray?
【发布时间】:2011-01-17 10:58:40
【问题描述】:

我有一个NSDictionary,看起来像:

{
"Item1" = 2.4;
"Item2" = 5.5;
"Item3" = 15.6;
}

要在表格视图中使用此 NSDictionary 项目,我必须将其转移到 NSArray,对吗?

所以我试试:

NSDictionary *dict = [myDict objectForKey:@"items"];

for (id item in dict) {
    [_myArray addObject:[dict objectForKey:item]];
}

但是 _myArray 保持为空?我做错了什么?

【问题讨论】:

    标签: objective-c nsarray nsdictionary


    【解决方案1】:
    + (NSArray *)getArrayListFromDictionary:(NSDictionary *)dictMain paramName:(NSString *)paramName
    {
        if([dictMain isKindOfClass:[NSDictionary class]])
        {
            if ([dictMain objectForKey:paramName])
            {
                if ([[dictMain objectForKey:paramName] isKindOfClass:[NSArray class]])
                {
                    NSArray *dataArray = [dictMain objectForKey:paramName];
    
                    return dataArray;
                }
            }
        }
        return [[NSArray alloc] init];
    }
    

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      在 Swift 4 中:

      let dict = ["Item1":2.4, "Item2": 5.4, "Item3" : 6.5]
      
      let array = Array(dict.values)
      

      【讨论】:

        【解决方案3】:

        这段代码实际上是用来给dictionarythrough的数据添加值到Array根据Key

        NSMutableArray *arr = [[NSMutableArray alloc]init];
        NSDictionary *dicto = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Hello",@"StackOverFlow",@"Key1",@"StackExchange",@"Key2", nil];
        NSLog(@"The dictonary is = %@", dicto);
        arr = [dicto valueForKey:@"Key1"];
        NSLog(@"The array is = %@", arr);
        

        【讨论】:

          【解决方案4】:

          代码片段1:

          NSMutableArray *array = [[NSMutableArray alloc] init];
          NSArray * values = [dictionary allValues];
          [array addObject:values];
          

          代码片段2:如果你想进一步添加

          [array addObject:value1];
          [array addObject:value2];
          [array addObject:value3];
          

          等等

          还可以将字典的键值存储到数组中

          NSArray *keys = [dictionary allKeys];
          

          【讨论】:

            【解决方案5】:

            你只需要初始化你的 NSMutableArray

            NSMutableArray  *myArray = [[NSMutableArray alloc] init];
            

            【讨论】:

              【解决方案6】:

              您可以在字典中创建一个包含所有对象的数组,然后将其用作 TableView 的数据源。

              NSArray *aValuesArray = [yourDict allValues];
              

              【讨论】:

                【解决方案7】:
                NSArray *keys = [dictionary allKeys];
                NSArray *values = [dictionary allValues];
                

                【讨论】:

                • 这两个将允许您将 NSDictionary 的键和值拆分为两个单独的 NSArray。很有帮助。
                • 请注意allKeysallValues 不一定生成相同的订单!所以“keys”中的第一项可能不是“values”中第一项的键。
                【解决方案8】:

                要获取字典中的所有对象,您还可以像这样使用enumerateKeysAndObjectsUsingBlock:

                NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:6];
                [yourDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
                    [yourArray addObject:obj];
                }];
                

                【讨论】:

                  【解决方案9】:

                  抛开你发布的代码的技术问题,你问这个:

                  要在表格视图中使用此字典项,我必须将其传输到 NSArray,对吗?

                  答案是:不一定。 UITableViewUITableViewDataSourceUITableViewDelegate 的机制没有任何内在的东西,这意味着您的数据必须在一个数组中。您将需要实现各种方法来告诉系统您的表中有多少行,以及每行中出现了哪些数据。许多人发现用像数组这样的有序数据结构来回答这些问题更加自然和高效。但是没有要求你这样做。如果您可以使用您开始使用的字典编写代码来实现这些方法,请随意!

                  【讨论】:

                  • 我知道这是一篇旧帖子,但是先生,您猜到了我的想法!
                  【解决方案10】:
                  NSArray * values = [dictionary allValues];
                  

                  【讨论】:

                  • 嘿,我想将对象添加到数组中,而不仅仅是值。
                  • 如果您阅读文档,allValues 会返回每个对象,这些对象将通过为字典中的每个键调用 objectForKey: 来返回。
                  • 如果你想添加更多对象,你需要把它变成一个 NSMutableArray 像这样:NSMutableArray *values = [[NSMutableArray alloc] initWithArray:[dictionary allValues]];
                  • 为什么这不是公认的答案?另一个答案甚至没有尝试回答这个问题,只是说“你不必!祝你好运!”
                  • 这个答案不会给你键值对数组,而是只给你值数组。我想这可能是它不被接受为答案的原因。
                  【解决方案11】:

                  这里可能会发生一些事情。

                  你列出的字典是myDict吗?如果是这样,那么您没有一个键为@"items" 的对象,并且dict 变量将为nil。您需要直接遍历myDict

                  要检查的另一件事是_myArray 是否是 NSMutableArray 的有效实例。如果为 nil,addObject: 方法将静默失败。

                  最后要检查的是字典中的对象是否正确封装在 NSNumbers(或其他一些非原始类型)中。

                  【讨论】:

                  • 不,myDict 不是上面显示的示例,它应该告诉您我有一个 NSDictionary 的 NSDictionary。如何检查我的对象是否为 NSNumbers?
                  • 对不起,我的错!我滥用“addObject”。我想将 NSDictionarys 的对象添加到我的数组中!所以我必须用另一种方式来做!
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-03-10
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多