2017-03-16 3 views
0

사전의 모든 값을 String으로 변경하고 싶습니다. 어떻게해야합니까?사전의 모든 값을 문자열로 변경하십시오.

예를 들면 :

{ @"a":"a", 
    @"b":"2", 
    @"c":{ 
     @"c1":"3", 
     @"c2":"4" 
    } 
} 

어떻게 함께 할 수있는 : 나는 변환 할

{ @"a":"a", 
    @"b":2, 
    @"c":{ 
     @"c1":3, 
     @"c2":4 
    } 
} 

? 나는 하루 종일 생각한다.

나는 사전 값을 통과 할 방법 이하를 사용하는 경우 : 값이 사전의 경우

NSArray *valueList = [dictionary allValues]; 

for (NSString * value in valueList) { 
    // change the value to String 
} 

을, 어떻게 그것에 대해?

그래서 누군가가 도와 줄 수 있습니까?

답변

0

, 그것은 NSString 모든 NSNumber 값을 변경하고 중첩 된 사전을 위해 자신을 호출합니다. 사전이 열거되는 동안 변이 될 수 없으므로 새로운 사전이 생성되어 채워집니다.

- (void)changeValuesOf:(NSDictionary *)dictionary result:(NSMutableDictionary *)result 
{ 
    for (NSString *key in dictionary) { 
     id value = dictionary[key]; 
     if ([value isKindOfClass: [NSDictionary class]]) { 
      NSMutableDictionary * subDict = [NSMutableDictionary dictionary]; 
      result[key] = subDict; 
      [self changeValuesOf:value result:subDict]; 
     } else if ([value isKindOfClass: [NSNumber class]]) { 
      result[key] = [NSString stringWithFormat:@"%@", value]; 
     } else { 
      result[key] = value; 
     } 
    } 
} 

NSDictionary *dictionary = @{@"a": @"a", @ "b":@2, @"c": @{@"c1": @3, @"c2":@4 }}; 
NSMutableDictionary *result = [NSMutableDictionary dictionary]; 
[self changeValuesOf:dictionary result:result]; 
NSLog(@"%@", result); 
+0

NSArray 클래스는 고려하지 않지만 좋은 답변이지만 이미 지시를받습니다. –

+0

미안하지만 당신의 질문은 'NSArray'를 전혀 언급하지 않고 ('valueList'를위한 타입을 제외하고) 어떻게 처리 할 것인가? 좀 더 구체적으로 물어보십시오. – vadian

0

사전에 대한 카테고리를 만들고 stringValueForKey:과 같은 메소드를 추가 할 수 있습니다. 실현이 같은 수 있습니다 : 당신은 재귀 적 방법으로이 작업을 수행 할 수

- (NSString)stringValueForKey:(NSString*)key 
{ 
    id value = self[key]; 
    if([value respondsToSelector:@selector(stringValue)]) 
     return [value performSelector:@selector(stringValue)] 
    return nil; 
} 
+0

값이 사전 인 경우 어떨까요? –

+0

이 메소드는 값이 사전이면 nil을 리턴합니다. String의 모든 값을 변경해야하는 이유는 무엇입니까? – Sergey

+0

나는 그렇지 않습니다. 하지만 그것은 op가 요구 한 것입니다. –

관련 문제