2009-12-03 30 views
14

Có cách nào để kiểm tra xem tập hợp có trống không?Kiểm tra NSSet trống?

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

// Code to do things... 

// Check for empty set? 

[setEmpty release]; 

gary

+1

Đây là một nhiệm vụ khá đơn giản. Bạn nên có thói quen nhìn vào các tài liệu cho câu trả lời như thế này. –

+2

Xin chào Brad, tôi đã kiểm tra tài liệu, nhưng đã bỏ lỡ mục nhập để đếm. Thêm lỗi về phần của tôi hơn là lười biếng tràn lan. – fuzzygoat

Trả lời

25

Bạn có thể sử dụng [setEmpty count] để xem có bao nhiêu yếu tố này nằm trong bộ ... vậy:

if ([setEmpty count] == 0) { 

hoặc

if (![setEmpty count]) { 

, vv ..

Tôi không thấy người khám phá Phương thức t 'isEmpty' trên http://developer.apple.com/mac/library/documentation/cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html nhưng nếu nó tồn tại, hãy thực hiện thay vì kiểm tra số đếm.

+0

Cảm ơn bạn Malaxeur, hoàn hảo Tôi tìm kiếm rằng cả trong tài liệu và trong Xcode tự động hoàn thành và bỏ lỡ nó cả hai lần: (Tôi không nghĩ rằng có một 'isEmpty' như tôi đã có một lỗi phương pháp thiếu khi thử nghiệm nó. – fuzzygoat

+2

Nếu bạn sử dụng nó rất nhiều, bạn có thể thêm phương thức 'isEmpty' làm một thể loại trên' NSSet', mà một phần tử giống như '- (BOOL) isEmpty {return [tự tính] == 0;} '. – mipadi

2
... đây là các tập tin đơn nhất được sử dụng trong kho lưu trữ chia sẻ của tôi: 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

Chức năng này sẽ làm việc trên tất cả các container Cocoa, chuỗi, và NSData.

4

Điều gì về điều này cho bộ thực sự lớn? Mục tiêu là không đếm mỗi lần.

NSSet *mySet = ... 

if ([mySet anyObject] == nil) 
{ 
    // The set is empty 
} 
Các vấn đề liên quan