Как фильтровать объект UIColor в NSMutableArray

Я генерирую случайные цвета и храню, NSmutableArrayкак это

for(int i=0; i<1000; i++) {
    UIColor *c = [self colorGen];
    [_cArray addObject:c];
}

Я хочу проверить, что каждый раз, когда я добавляю цвет в массив , его не повторяется, как я применяю предикат_cArray, чтобы проверить, что возврат цвета [self colorGen]методом уже не существует_cArray, например_cArray, уже содержит красный цвет после 10 итераций [self colorGen]снова возвращает красный цвет, так как я могу избежать его добавления снова мой массив.

4 ответа

  1. NSMutableSet *colors = [NSMutableSet set];
    while (colors.count < 1000) {
        [colors addObject:[self colorGen]];
    }
    

    пример кода для UIColorсравнения объектов:

    NSMutableSet *colors = [NSMutableSet set];
    
    UIColor *color1 = [UIColor colorWithRed:0.1 green:0.2 blue:0.3 alpha:1];
    UIColor *color2 = [UIColor colorWithRed:0.1 green:0.2 blue:0.3 alpha:1];
    
    [colors addObjectsFromArray:@[color1, color2]];
    
    NSLog(@"%lu", (unsigned long)colors.count);
    

    этот код печатает 1, указывая, что оба цвета считаются равными!

  2. вы можете сделать как,

     for(int i=0; i<1000; i++) {
        UIColor *c = [self colorGen];
    
        if (![_cArray containsObject:c] ) {
    
             [_cArray addObject:c];
    
        }
        else{
    
            NSLog(@"already there");
        }
    
    
    }
    
  3. Изменение методов colorGen оно должно возвращать шестнадцатеричное значение UIColor

    for(int i=0; i<1000; ) {
        NSString *strCode = [self colorGen];
    
        if (![_cArray containsObject:strCode] ) {
    
             [_cArray addObject:strCode];
            i++;
    
        }
        else{
    
            NSLog(@"already there");
        }
    
    
    }