9

NSMutableDictionary で同じキーに複数の値を設定する方法を教えてください。

以下のアプローチを使用すると、値が最近の値に置き換えられます。

私の場合:

[dictionary setObject:forename forKey:[NSNumber numberWithint:code]];
[dictionary setObject:surname forKey:[NSNumber numberWithint:code]];
[dictionary setObject:reminderDate forKey:[NSNumber numberWithint:code]];

ディクショナリの内容を表示すると、reminderDatefor キー コードのみが取得されます。ここで、コードはすべての値で同じです。姓と名が に置き換えられないようにするにはどうすればよいですかplannedReminder

ありがとう!

4

4 に答える 4

15

をキーとして使用codeしているようで、 に基づいて複数の値を表現したいと考えていますcode。その場合、次のいずれかを行う必要があります。

  1. に関連付けられているすべてのデータをcode別のクラス (おそらく と呼ばれるPerson) に抽象化し、このクラスのインスタンスをディクショナリの値として使用します。

  2. 辞書の複数の層を使用します。

    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
    
    NSMutableDictionary *firstOne = [NSMutableDictionary dictionary];
    [firstOne setObject:forename forKey:@"forename"];
    [firstOne setObject:surname forKey:@"surname"];
    [firstOne setObject:reminderDate forKey:@"reminderDate"];
    
    [dictionary setObject:firstOne forKey:[NSNumber numberWithInt:code]];
    
    // repeat for each entry.
    
于 2010-08-09T07:01:21.650 に答える
5

オブジェクトをディクショナリに格納することに本当に固執している場合、および文字列を扱っている場合は、常にすべての文字列をカンマで区切って追加できます。キーからオブジェクトを取得すると、すべての文字列が得られます。準csv形式のオブジェクト!その後、その文字列をオブジェクトの配列に簡単に解析できます。

実行できるサンプルコードを次に示します。

NSString *forename = @"forename";
NSString *surname = @"surname";
NSString *reminderDate = @"10/11/2012";
NSString *code = @"code";

NSString *dummy = [[NSString alloc] init];
dummy = [dummy stringByAppendingString:forename];
dummy = [dummy stringByAppendingString:@","];
dummy = [dummy stringByAppendingString:surname];
dummy = [dummy stringByAppendingString:@","];
dummy = [dummy stringByAppendingString:reminderDate];
dummy = [dummy stringByAppendingString:@","];
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:dummy forKey:code];

次に、辞書内のオブジェクトを取得して解析します。

NSString *fromDictionary = [dictionary objectForKey:code];
NSArray *objectArray = [fromDictionary componentsSeparatedByString:@","];
NSLog(@"object array: %@",objectArray);

dreamlax のような辞書のレイヤーを使用するほどきれいではないかもしれませんが、キーの配列を格納したい辞書を扱っていて、その配列内のオブジェクト自体に特定のキーがない場合、これは解決策です!

于 2012-07-14T01:53:49.233 に答える
2

辞書の仕組みを理解していないと思います。各キーは 1 つの値のみを持つことができます。辞書の辞書または配列の辞書が必要です。

ここでは、ユーザーごとに辞書を作成し、それをマスター辞書に保存します。

NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:
forename, @"forename", surname, @"surname", @reminderDate, "@reminderDate", nil];

[dictionary setObject:d forKey:[NSNumber numberWithint:code]];
于 2010-08-09T07:01:40.827 に答える
1

現代の構文はずっときれいです。

A. 読み込み時に静的構造を構築している場合:

NSDictionary* dic = @{code : @{@"forename" : forename, @"surname" : surnamem, @"reminderDate" : reminderDate}/*, ..more items..*/};

B. リアルタイムでアイテムを追加する場合 (おそらく):

NSMutableDictionary* mDic = [[NSMutableDictionary alloc] init];
[mDic setObject:@{@"forename" : forename, @"surname" : surnamem, @"reminderDate" : reminderDate} forKey:code];
//..repeat

次に、2D辞書としてアクセスします...

mDic[code][@"forename"];
于 2015-05-22T17:23:29.383 に答える