如何比较NSArray 的所有字符串是否相等?
我应该扫描每个字符串的数组吗?
谢谢
您可以通过从数组创建一个新集合来做到这一点。该集合将仅包含唯一条目,因此如果集合中的元素数为 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) { ... }
这也适用于任何对象,而不仅仅是字符串。
该类NSArray
是通用的,因此它不包含执行此操作的功能,所以是的,您必须自己检查每个字符串。
特洛伊木马是对的。您可以使用类别增强 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 ...
...有很多方法可以做到这一点。
您是否要检查所有字符串是否彼此相等?
@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;