4

如何比较NSArray 的所有字符串是否相等?

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

谢谢

4

4 回答 4

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) { ... }


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

于 2012-07-16T13:29:21.110 回答
2

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

于 2012-07-16T12:51:22.413 回答
0

特洛伊木马是对的。您可以使用类别增强 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 ...

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

于 2012-07-16T13:03:27.330 回答
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;
于 2012-07-16T13:03:39.367 回答