2013-06-24 42 views
7

Tôi có một mảng đối tượng bao gồm hai thuộc tính: NSStringBOOL. Tôi muốn sắp xếp mảng này sao cho tất cả các số BOOL s là YES xuất hiện trước tất cả các bool là NO. Sau đó, tôi muốn cho danh sách các đối tượng có BOOL YES để bảng chữ cái và tôi cũng muốn cho các đối tượng với NO để được sắp xếp theo thứ tự bảng chữ cái. Có một số loại thư viện có thể thực hiện điều này trong mục tiêu c? Nếu không phải là cách hiệu quả nhất để làm điều này là gì?Sắp xếp mảng dựa trên hai tham số

Trả lời

20

Bạn có thể sử dụng NSSortDescriptor s để thực hiện phân loại:

// Set ascending:NO so that "YES" would appear ahead of "NO" 
NSSortDescriptor *boolDescr = [[NSSortDescriptor alloc] initWithKey:@"boolField" ascending:NO]; 
// String are alphabetized in ascending order 
NSSortDescriptor *strDescr = [[NSSortDescriptor alloc] initWithKey:@"strField" ascending:YES]; 
// Combine the two 
NSArray *sortDescriptors = @[boolDescr, strDescr]; 
// Sort your array 
NSArray *sortedArray = [myArray sortedArrayUsingDescriptors:sortDescriptors]; 

Bạn có thể đọc thêm về sắp xếp với mô tả here.

1

Tra cứu NSSortDescriptors. Tạo hai, một cho chuỗi, một cho bool. Sau đó thêm cả hai vào một mảng. Sau đó sử dụng phương thức NSArray sortArrayWiyhDescriptors.

3

Một thay thế cho việc sử dụng mô tả loại là sử dụng một NSComparator:

NSArray *myObjects = ... // your array of "Foo" objects 
NSArray *sortedArray = [myObjects sortedArrayUsingComparator:^(Foo *obj1, Foo *obj2) { 
    if ((obj1.boolProp && obj2.boolProp) || (!obj1.boolProp && !obj2.boolProp)) { 
     // Both bools are either YES or both are NO so sort by the string property 
     return [obj1.stringProp compare:obj2.stringProp]; 
    } else if (obj1.boolProp) { 
     // first is YES, second is NO 
     return NSOrderedAscending; 
    } else { 
     // second is YES, first is NO 
     return NSOrderedDescending; 
    } 
)]; 

Xin lưu ý rằng tôi có thể có cuối cùng hai lạc hậu. Nếu điều này sắp xếp giá trị Không trước giá trị Có thì hãy trao đổi hai giá trị trả về cuối cùng.

Các vấn đề liên quan