wake-up-neo.com

NSDictionary zu NSArray?

ich habe ein NSDictionary, das wie folgt aussieht:

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

Um diese NSDictionary Elemente in einer Tabellenansicht zu verwenden, muss ich sie auf ein NSArray übertragen, stimmt das?

Also versuche ich:

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

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

Aber _myArray bleibt leer? Was mache ich falsch?

34
phx

Abgesehen von den technischen Problemen mit dem von Ihnen geposteten Code haben Sie Folgendes gefragt:

Um diese Dictionary-Elemente in einer Tabellenansicht zu verwenden, muss ich sie auf ein NSArray übertragen, oder?

Die Antwort lautet: nicht unbedingt. Der Maschinerie von UITableView, UITableViewDataSource oder UITableViewDelegate ist nichts eigen, was bedeutet, dass Ihre Daten müssen in einem Array sind. Sie müssen verschiedene Methoden implementieren, um dem System mitzuteilen, wie viele Zeilen sich in Ihrer Tabelle befinden und welche Daten in jeder Zeile angezeigt werden. Viele Menschen finden es viel natürlicher und effizienter, diese Fragen mit einer geordneten Datenstruktur wie einem Array zu beantworten. Aber es gibt keine Voraussetzung dass Sie dies tun. Wenn Sie den Code zum Implementieren dieser Methoden mit dem Wörterbuch schreiben können, mit dem Sie begonnen haben, fühlen Sie sich frei!

29
Sixten Otto
NSArray * values = [dictionary allValues];
222
Dave DeLong
NSArray *keys = [dictionary allKeys];
NSArray *values = [dictionary allValues];
43
Nikhil Dinesh

Sie können ein Array aller Objekte im Wörterbuch erstellen und es dann als Datenquelle für die TableView verwenden.

NSArray *aValuesArray = [yourDict allValues];
5
RandomGuy

Code Snippet1:

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

Code Snippet2: Wenn Sie weitere hinzufügen möchten

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

Und so weiter

Sie können auch Schlüsselwerte des Wörterbuchs im Array speichern

NSArray *keys = [dictionary allKeys];
3
Yogeesh H T

Es gibt ein paar Dinge, die hier passieren könnten.

Ist das von Ihnen aufgeführte Wörterbuch das myDict? Wenn ja, dann haben Sie kein Objekt mit dem Schlüssel @"items" und die Variable dict sind Null. Sie müssen myDict direkt durchlaufen.

Eine andere Sache zu überprüfen ist, ob _myArray ist eine gültige Instanz eines NSMutableArray. Wenn es Null ist, ist das addObject: Methode wird im Hintergrund fehlschlagen.

Als letztes muss überprüft werden, ob die Objekte in Ihrem Wörterbuch ordnungsgemäß in NSNumbers (oder einem anderen nicht-primitiven Typ) eingeschlossen sind.

2
Matt B.
+ (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];
}

Hoffe das hilft!

1

Sie müssen nur Ihr NSMutableArray initialisieren

NSMutableArray  *myArray = [[NSMutableArray alloc] init];
1
AP Singh

Dieser Code wird tatsächlich verwendet, um Werte zu dictionary und through den Daten zu einem Array gemäß Key hinzuzufügen.

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);
1
onCompletion

Um alle Objekte in einem Wörterbuch zu erhalten, können Sie auch enumerateKeysAndObjectsUsingBlock: wie so:

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

In Swift 4:

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

let array = Array(dict.values)
0
Ankit garg