如何比较NSArray的* ALL *字符串是否相等?

时间:2012-07-16 12:48:57

标签: objective-c

如果NSArray的所有字符串相等,我如何比较?

我应该扫描每个字符串的数组吗?

感谢

4 个答案:

答案 0 :(得分: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) { ... }


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

答案 1 :(得分:2)

NSArray类是通用的,因此它不包含执行此操作的功能,所以是的,您必须自己检查每个字符串。

答案 2 :(得分: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 ...

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

答案 3 :(得分: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;