2009-12-03 3 views
14

Есть ли способ проверить, пуст ли набор?Проверка пустой NSSet?

NSMutableSet *setEmpty = [[NSMutableSet alloc] init]; 

// Code to do things... 

// Check for empty set? 

[setEmpty release]; 

Гэри

+1

Это довольно простая задача. Вы должны привыкнуть смотреть на документы для таких ответов. –

+2

Привет, Брэд, я проверил документы, но пропустил запись для подсчета. Больше ошибок с моей стороны, чем безудержная лень. – fuzzygoat

ответ

25

Вы можете использовать [число setEmpty], чтобы увидеть, сколько элементов в наборе ... так:

if ([setEmpty count] == 0) { 

или

if (![setEmpty count]) { 

и т.д. ..

Я не видел explici t 'isEmpty' на http://developer.apple.com/mac/library/documentation/cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html, но если он существует, пойдите для этого вместо проверки счета.

+0

Спасибо, Малаксер, отлично, я искал это как в документах, так и в автокоме Xcode и пропустил его оба раза :(Я не думаю, что есть «isEmpty», поскольку при тестировании я получил недостающую ошибку метода. Anyways count отлично, спасибо за ответ и ваше время. – fuzzygoat

+2

Если вы его много используете, вы можете добавить метод 'isEmpty' в качестве категории на' NSSet', в котором тело типа '- (BOOL) isEmpty {return [self count] == ​​0;} '. – mipadi

2
... вот одним наиболее часто используемых файлов в моем общем хранилище: DMCommonMacros.h
 
static inline BOOL IsEmpty(id thing) { 
    return thing == nil 
     || ([thing respondsToSelector:@selector(length)] 
     && [(NSData *)thing length] == 0) 
     || ([thing respondsToSelector:@selector(count)] 
     && [(NSArray *)thing count] == 0); 
}

- Wil Shiply

Эта функция будет работать на всех какао-контейнеры, строки и NSData.

4

Как насчет этого для действительно больших комплектов? Цель состоит в том, чтобы не делать счет каждый раз.

NSSet *mySet = ... 

if ([mySet anyObject] == nil) 
{ 
    // The set is empty 
} 
Смежные вопросы