首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArrayList + HashMap

ArrayList + HashMap
EN

Stack Overflow用户
提问于 2013-07-08 17:48:08
回答 1查看 267关注 0票数 1

我有一个包含字典的数组。

在向数组添加新项时,我希望根据添加的键是否存在,将它们添加到顶部或更新字典。如果没有与该键对应字典,我想将其添加到顶部。否则,我想用这个键更新字典。

我们怎样才能在Objective-C中做到最好呢?

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

如果字典中存在上面的键(例如"String1"),我们如何更新字典值?如果不存在,如果带有键的字典在列表中不存在,我们如何将其附加到数组的顶部。

如果代码中有一些语法错误,请道歉。这只是为了让你明白问题是什么。

EN

回答 1

Stack Overflow用户

发布于 2013-07-08 19:09:58

好吧,这是未经测试的,有点笨拙,但我认为它符合您的要求:

MyList.h:

代码语言:javascript
复制
#import <Cocoa/Cocoa.h>

@interface MyList : NSObject {
    NSMutableArray *_array;
}

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

@end

然后,实现将类似于:

MyList.m:

代码语言:javascript
复制
#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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17523607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档