2011-03-31 27 views
5

Tôi có một loạt các NSMutableDictionaries, chứa (trong số những thứ khác) là Vị trí chính. Tôi cần sắp xếp mảng để nhập nó vào bảng. Trên đầu nên là N, dưới đây nên là A, và dưới đó nên được R. Vì vậy, trong sắp xếp: Làm thế nào tôi có thể sắp xếp một mảng theo thứ tự: N - A - R?Obj/C: Sắp xếp một mảng theo thứ tự tùy chỉnh

EDIT: Tôi có thể đặt hàng bằng cách nhìn vào hai biến, nhưng tôi đang sử dụng nhiều hơn thì 2 biến (7 trong tổng số) ...

Cảm ơn,

Trả lời

6

Nếu mảng của bạn là có thể thay đổi, bạn có thể sắp xếp nó bằng cách sử dụng các phương pháp -sortUsing .... Nếu không, bạn có thể tạo một mảng mới, được sắp xếp bằng cách sử dụng các phương thức -sortedArrayUsing .... Ví dụ, có -sortUsingComparator: và -sortedArrayUsingComparator: các phương thức lấy một khối so sánh làm tham số. Bạn chỉ cần cung cấp một khối so sánh hai đối tượng sử dụng thứ tự sắp xếp tùy chỉnh của bạn, như thế này:

[myArray sortUsingComparator:^(id firstObject, id secondObject) { 
    NSString *firstKey = [firstObject valueForKey:@"location"]; 
    NSString *secondKey = [secondObject valueForKey:@"location"]; 
    if ([firstKey stringEqual:@"N"] || [lastKey stringEqual:@"R"]) 
     return NSOrderedAscending; 
    else if ([firstKey stringEqual:secondKey]) 
     return NSOrderedSame; 
    else 
     return NSOrderedDescending; 
}]; 

Có một cuộc thảo luận khá thấu đáo về sắp xếp mảng, với các ví dụ, trong tài liệu Collections Programming Topics.

+0

@Caleb cảm ơn Caleb, điều đó đã giúp tôi một chút. Tôi vẫn đang đấu tranh với việc sắp xếp nhiều Địa điểm hơn, N xuất hiện trên đầu trang nhưng tất cả các chữ cái bên dưới xuất hiện cùng nhau, nhưng trên phân loại ngẫu nhiên. Tổng số danh sách vị trí của tôi phải là N-G-B-A-F-C. Vì vậy, ví dụ, tất cả các A cùng nhau, nhưng không trực tiếp bên dưới B. Thứ tự được sắp xếp là N-B-C-F-A-G. Tôi đang sử dụng khối bạn đã sử dụng nhiều lần, có lẽ có điều gì đó đang xảy ra ở đó ...? – Joetjah

+0

@Caleb ofcourse, sử dụng khối này nhiều lần sẽ không hoạt động (và đi lang thang một cách ngẫu nhiên). Gửi bình luận trước đó một chút quá nhanh mà không cần suy nghĩ đủ. Mặc dù, bằng cách sử dụng hai phím làm việc cho tôi, nhưng sử dụng nhiều hơn thì 2 (mà tôi cần) là nơi tôi đấu tranh. Bất kỳ đề xuất? – Joetjah

+0

@Joetjah, tôi không chắc chắn ý của bạn về việc sử dụng khối nhiều lần. Tôi sẽ không nhất thiết khuyên bạn nên sử dụng chính xác mã đó, đặc biệt là nếu bạn có nhiều hơn ba giá trị mà bạn đã chỉ ra ban đầu. Tôi đã thực sự chỉ đưa ra một cái gì đó nhanh chóng và bẩn như một ví dụ. Cách tốt hơn để đi cho nhiều giá trị hơn có thể là xác định thứ tự dưới dạng chuỗi: @ "NBCFAG". Sau đó, bạn có thể tìm thấy giá trị vị trí của từng từ điển trong chuỗi và so sánh chỉ mục của chúng. Điều này quy mô tốt hơn nhiều cho số lượng lớn hơn các giá trị có thể. – Caleb

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