2017-03-16 75 views
0

我想將Dictionary的所有值更改爲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

你可以用遞歸方法做到這一點,它改變了一切NSNumberNSString並自稱爲嵌套的字典。由於字典在列舉時不能突變,因此創建並填充了一個新的字典:

- (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。爲什麼你需要改變一個字符串的所有值? – Sergey

+0

我不知道。但多數民衆贊成的問題。 –

相關問題