34

我有一个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 保持为空?我究竟做错了什么?

4

11 回答 11

224
NSArray * values = [dictionary allValues];
于 2010-02-16T16:04:36.317 回答
43
NSArray *keys = [dictionary allKeys];
NSArray *values = [dictionary allValues];
于 2012-04-25T11:17:15.600 回答
29

撇开您发布的代码的技术问题不谈,您问这个:

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

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

于 2010-02-16T16:14:12.607 回答
4

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

NSArray *aValuesArray = [yourDict allValues];
于 2014-02-14T11:33:15.010 回答
3

代码片段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];
于 2014-11-18T14:01:59.747 回答
2

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

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

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

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

于 2010-02-16T16:02:58.337 回答
1

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

NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:6];
[yourDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    [yourArray addObject:obj];
}];
于 2011-12-09T02:06:34.577 回答
1

你只需要初始化你的 NSMutableArray

NSMutableArray  *myArray = [[NSMutableArray alloc] init];
于 2015-04-24T05:36:50.460 回答
1

此代码实际上用于将值添加到dictionary并将through数据添加到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);
于 2015-09-07T06:43:34.330 回答
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];
}

希望这可以帮助!

于 2018-05-08T07:45:14.317 回答
0

在 Swift 4 中:

let dict = ["Item1":2.4, "Item2": 5.4, "Item3" : 6.5]

let array = Array(dict.values)
于 2017-10-12T19:26:01.023 回答