NSDictionaries
次のように、事前にわからないものが2つあるとします。
NSDictionary *dictA = @{ @"key1" : @1,
@"key2" : @2 };
NSDictionary *dictB = @{ @"key1" : @"a string" };
dictB
のキーと のキーまたは値の間の最初の一致を見つけたいですdictA
。の各キーはdictB
、NSNumber または文字列のいずれかになります。数値の場合は、 の値から一致を見つけようとしますdictA
。文字列の場合は、 のキーから一致を見つけようとしますdictA
。
for ループを使用すると、次のようになります。
id match;
for (id key in dictA ) {
for (id _key in dictB {
if ( [_key is kindOfClass:NSNumber.class] && _key == dictA[key] ) {
match = _key
goto outer;
}
else if ( [_key is kindOfClass:NSString.class] && [_key isEqualToString:key] ) {
match = _key
goto outer;
}
}
};
outer:;
NSString *message = match ? @"A match was found" : @"No match was found";
NSLog(message);
メソッドを使用RACSequence
して ReactiveCocoa でこれを書き直して、次のようにするにはどうすればよいでしょうか。RACStream
// shortened pseudo code:
// id match = [dictA.rac_sequence compare with dictB.rac_sequence using block and return first match];