2012-07-16 59 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

相關問題