2012-07-16 41 views

回答

2

NSArray类是通用的,所以它不会包含功能来执行这一点,所以,是的,你必须自己去查每个字符串。

0

trojanfoe是对的。你可以用类别来增强NSArray并做类似的事情...

NSArray *array = @[ @"A", @"B", @"C" ]; 

    __block BOOL allObjectsAreEqual = YES; 
    if (array.count > 1) { 
    NSString *firstObject = array[0]; 
    [array enumerateObjectsUsingBlock:^void(id obj, NSUInteger idx, BOOL *stop) { 
     if (idx == 0) { 
     return; 
     } 

     if ((allObjectsAreEqual = [firstObject isEqualToString:obj]) == NO) { 
     *stop = YES; 
     } 
    }]; 

    // And here check for allObjectsAreEqual ... 

......有很多方法可以做到这一点。

0

你想检查是否所有的字符串都相等

@interface NSArray (MyAdditions) 

- (BOOL) isFilledWithEqualObjects { 
    if (!self.count) return YES; 
    id firstObject = [self objectAtIndex:0]; 
    for (id obj in self) { 
     // Avoid comparing firstObject to itself (and any other pointers to 
     // firstObject) 
     if (firstObject == obj) continue; 
     if (![firstObject isEqual:obj]) return NO; 
    } 
    return YES; 
} 

@end 

该示例使用-isEqual:来处理任何类型的对象。如果你知道的内容是字符串,您可以使用-isEqualToString:代替:

 if (![firstObject isEqualToString:obj]) return NO; 
+1

“==”在比较字符串时是错误的。应该是“isEqualToString” – Umgre 2012-07-16 13:09:55

+0

==检查是为了避免比较'firstObject'本身。比较的那一行是那个使用'-isEqual:'的那个。 – paulmelnikow 2012-07-16 15:37:27

4

您可以通过创建从阵列中一组新的做到这一点。该集合将只包含唯一条目,因此如果集合中元素的数量是1,那么数组中的所有项目都是相等的。

NSSet *uniqueItems = [NSSet setWithArray:yourArray]; 
if ([uniqueItems count] < 2) { 
    // All items in "yourArray" are the same (no matter how many they are) 
} 

在上述例子中我考虑空集(表示空数组),为是唯一的为好。如果你没有,那么你可以改变if语句来if ([uniqueItems count] == 1) { ... }


这也将适用于任何对象,而不仅仅是字符串。

+0

有趣。这种方式代码不多,而且对于一个小阵列或几乎没有独特元素时可能会很快。但是,对于大型阵列或许多独特元素,这需要进行大量额外比较。 – paulmelnikow 2012-07-16 15:44:18

+0

@noa我认为,由于OP认为所有元素都可以相等,所以它很可能只是一些独特的值,并且可能不超过数组中的几百个值,在这种情况下,性能不应该是问题。 – 2012-07-16 20:43:33