2013-07-08 6 views
1

사전이 포함 된 배열이 있습니다.ArrayList + HashMap

배열에 새 항목을 추가 할 때 추가 할 키가 존재하는지 여부에 따라 맨 위에 추가하거나 사전을 업데이트하고 싶습니다. 해당 키에 대한 사전이 없으면 맨 위에 추가하고 싶습니다. 그렇지 않으면 해당 키로 사전을 업데이트하려고합니다.

어떻게 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]; 
} 

는 위의 키가있는 경우 우리가 사전 값을 업데이트 할 수있는 방법 (예 : "문자열 1"에 대한 말), 그리고 키를 사용하여 사전 않는 경우하지 않으면 것은 우리가 배열의 상단에 추가하는 방법 목록에 없습니다.

코드에 구문 오류가 있으면 사과하십시오. 문제가 무엇인지 이해하는 것입니다.

+2

일부 코드를 입력하십시오. –

+0

NSArray와 NSDictionary를 사용하지 않는 특별한 이유는 무엇입니까? –

+0

자바 개발자이지만 objective-c에서 NSMutableArray 및 NSMutableDictionary를 사용하려고합니다. – user694688

답변

2

확인이 안된 다소 투박하지만, 나는 당신의 요구 사항을 충족 생각 :

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 
+0

+1. 이 코드는 제대로 작동하는 것처럼 보입니다.하지만이 유형의 데이터 구조를 사용하는 전제가 잘못되었으며 OP가 왜이 기능을 원한다고 말하면 더 효율적인 것으로 대체 될 수 있습니다. 네 잘못이 아니야. – Abizern

+0

@Abizern 예, 그렇습니다. – trojanfoe

+0

UITableView를 업데이트하기 위해이 작업을 시도하고 있습니다. 최신 데이터로 테이블을 업데이트하고 이미 존재하는 경우 데이터를 교체하려고합니다. – user694688

관련 문제