web-dev-qa-db-ja.com

NSDictionaryからNSArray?

次のような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は空のままですか?何が間違っていますか?

34
phx

投稿したコードの技術的な問題は別として、次のように尋ねました。

この辞書項目をテーブルビューで使用するには、NSArrayに転送する必要がありますか?

答えは、必ずしもそうではありません。 UITableViewUITableViewDataSource、またはUITableViewDelegateの機構に固有のものはありません。つまり、データがあるが配列にあることを意味します。テーブルに含まれる行の数と各行に表示されるデータをシステムに伝えるために、さまざまなメソッドを実装する必要があります。多くの人は、配列のような順序付けられたデータ構造でこれらの質問に答えることがはるかに自然で効率的だと感じています。しかし、要件はありません。あなたが始めた辞書でそれらのメソッドを実装するためのコードを書くことができたら、お気軽に!

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

辞書内のすべてのオブジェクトの配列を作成し、TableViewのデータソースとして使用できます。

NSArray *aValuesArray = [yourDict allValues];
5
RandomGuy

コードスニペット1:

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

Code Snippet2:さらに追加したい場合

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

等々

また、辞書のキー値を配列に保存できます

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

ここで起こる可能性のあることがいくつかあります。

リストした辞書はmyDictですか?その場合、@"items"のキーを持つオブジェクトは存在せず、dict変数はnilになります。 myDictを直接反復処理する必要があります。

もう1つ確認すべきことは、_myArrayがNSMutableArrayの有効なインスタンスであるかどうかです。 nilの場合、addObject:メソッドは警告なしに失敗します。

最後に確認すべきことは、辞書内のオブジェクトがNSNumbers(または他の非プリミティブ型)に適切に含まれていることです。

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];
}

お役に立てれば!

1

NSMutableArrayを初期化するだけです

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

このコードは、実際に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);
1
onCompletion

辞書内のすべてのオブジェクトを取得するには、enumerateKeysAndObjectsUsingBlock: そのようです:

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