2012-01-14 1 views
1

私はこのようなNSDictionaryのを持っていた場合:NSPredicatesを使用して配列内のオブジェクトを辞書の値で置き換えることはできますか?

NSMutableDictionary *valuesDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
[NSNumber numberWithDouble:-60.0],@”a”, 
[NSNumber numberWithDouble:0.0],@”b”, 
[NSNumber numberWithDouble:-12.0],@”c”, 
[NSNumber numberWithDouble:.3],@”x”, nil]; 

と、このような配列:

NSArray *program = [NSArray arrayWithObjects: @"a",@"12.6",@"100",@"+",@"x",nil]; 

コードが配列programWithVariableValuesを返すためにどのようになるか、例えば、「@から成ります - 「60」、「12.6」、「100」、「@」、「@」、「3」、nil?

(そのvalueforkeyの持つ配列で見つかったすべての変数を置き換える)

ことがNSPredicateを利用するには良い場所でしょうか?またはちょうど高速列挙?または、他の何か?

答えて

1

あり述語および/またはvalueForKeyPath演算子を使用して賢いワンライナーの解決策になるかもしれないが、誰かがその1つのアウトを数字になるまで、これはトリックを行う必要があります。

NSMutableArray *programWithVariableValues = [NSMutableArray array]; 
for (NSString *key in program) 
{ 
    [programWithVariableValues addObject:[[valuesDictionary objectForKey:key] description] ?: key]; 
} 

programWithVariableValues配列は、今(自分の価値観が含まれています文字列として)。番号をNSNumbersとして保持したい場合は、「[... description]」コールを取り出してください。

+0

ありがとうございます。それは素晴らしい作品です。ので、基本的に、値の辞書に一致がない場合、?:単にエレガントなキーを置きます。 objcは私の上に成長しています。 –

+0

はい、 "foo?:bar"は、基本的には "foo?foo:bar"、または "if(foo){return foo} else {return bar}"の略記です。だからロジックは "キーで辞書のオブジェクトをつかんで、それが返された場合は代わりにキーを使用します" –

+0

ほとんどのものが条件付きになる方法に慣れる必要があります...それはかなりクールだと思います –

関連する問題