1

辞書を含む配列があります。

配列に新しいアイテムを追加するときは、追加するキーが存在するかどうかに応じて、それらを一番上に追加するか、辞書を更新します。そのキーの辞書が存在しない場合は、一番上に追加します。それ以外の場合は、そのキーで辞書を更新します。

Objective-C でこれを最善に行うにはどうすればよいでしょうか?

NSMutableArray * mediaData = [[NSMutableArray alloc] init];
for (int k=0; k<mediaData.count; k++)
{
    NSDictionary   *dict = [NSDictionary dictionaryWithObject: @"String1" forKey: @"Test"];
    [mediaData add:dict];
}

上記のキー (たとえば "String1" など) が存在する場合、辞書の値を更新するにはどうすればよいでしょうか。そうでない場合は、キーを持つ辞書がリストに存在しない場合に配列の先頭に追加する方法を教えてください。

コードに構文エラーがある場合はお詫び申し上げます。問題が何であるかを理解させるためのものです。

4

1 に答える 1

2

OK、これはテストされておらず、やや不格好ですが、要件を満たしていると思います:

MyList.h:

#import <Cocoa/Cocoa.h>

@interface MyList : NSObject {
    NSMutableArray *_array;
}

- (void)addOrUpdateObject:(NSObject *)value
                   forKey:(NSString *)key;

@end

次に、実装は次のようになります。

MyList.m:

#import "MyList.h"

@implementation MyList

- (id)init {
    self = [super init];
    if (self != nil) {
        _array = [[NSMutableArray alloc] init];
    }
    return self;
}

- (void)addOrUpdateObject:(NSObject *)value
                   forKey:(NSString *)key {

    for (NSUInteger i = 0; i < _array.count; i++) {
        NSMutableDictionary *dict = [_array objectAtIndex:i];
        NSArray *allKeys = [dict allKeys];
        for (NSUInteger j = 0; j < allKeys.count; j++) {
            NSString *existingKey = [allKeys objectAtIndex:j];
            if ([existingKey isEqualToString:key]) {
                [dict setObject:value forKey:key];
                return;    // Updated
            }
        }
    }

    // Key not found; create a new dictionary
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setObject:value forKey:key];
    [_array insertObject:dict atIndex:0];
}

@end
于 2013-07-08T11:09:57.690 に答える