0

私はこの方法で何時間も働いています。otherCardsisEqualとして渡されたカードの属性が、クラスのこの (自己) インスタンスの同じ属性と等しいかどうかを単純にチェックすることになっています。しかし、私は髪を引き裂いています - それは間違った結果をもたらしています

 (BOOL)otherCards: (NSArray *)otherCards allHaveUnequalAttribute: (NSString *)key
{
    NSArray *values = [NSArray arrayWithArray:[otherCards valueForKey:key]];
    int countUnequalMatches = 0;

        for (NSNumber *setValue in values) {
            if (![[self valueForKey:key] isEqual:setValue]) {
                countUnequalMatches++;}
        }
    NSLog(@"countUnequalMatches %d values count: %d", countUnequalMatches, [values count]);

    if (countUnequalMatches == [values count]) return  YES ?: NO;
}

次のように呼び出されます。

 if ([self otherCards:otherCards allHaveUnequalAttribute:CARD_SHAPE]) {
        NSLog(@"All unequal");
    } else {
        NSLog(@"One or more card equal");
    }
4

2 に答える 2

1

(countUnequalMatches == [values count])return YES?:NO;の場合、自分でバグを見つけました。

if(countUnequalMatches == [otherCards count])return YES?:NO;

ユニークなアイテムを数える方法としてセットを使用したので。

于 2013-02-16T13:19:22.360 に答える
1

これは、述語が処理するのに非常に適している種類のものです。

-(BOOL)otherCards: (NSArray *)otherCards allHaveUnequalAttribute: (NSString *)key
{
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K == %@", key, [self valueForKey:key]];

    NSArray *equalCards = [otherCards filteredArrayUsingPredicate:pred];

    return equalCards.count == 0;
}
于 2013-02-16T13:31:26.027 に答える