2017-03-16 12 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を返します。なぜあなたは文字列のすべての値を変更する必要がありますか? – Sergey

+0

私はしません。しかし、それが何を求めているのか。 –

関連する問題