2011-12-31 33 views
5

Tôi có hai NSMutableArrays. Nội dung của mục đầu tiên là số, được ghép nối với nội dung của phần thứ hai:Đặt hàng hai NSMutableArrays dựa trên một

First Array Second Array 
    45    Test45 
    3    Test3 
    1    Test1 
    10    Test10 
    20    Test20 

Đó là giao diện của cả hai mảng. Bây giờ làm thế nào tôi có thể ra lệnh cho họ số lượng như vậy họ kết thúc như:

First Array Second Array 
    1    Test1 
    3    Test3 
    10    Test10 
    20    Test20 
    45    Test45 

Cảm ơn!

+2

Điều này được gọi là "sắp xếp chỉ mục". Kỳ lạ thay, không có thói quen thư viện để làm điều này trong Objective-C hoặc trong hầu hết các môi trường khác, mặc dù yêu cầu xuất hiện ở đây khá thường xuyên. Vì vậy, cách tiếp cận đơn giản nhất là đưa các mục của bạn vào một đối tượng khác (phần tử mảng đầu tiên/phần tử mảng thứ hai) và sắp xếp các đối tượng đó, sau đó tái tạo lại các mảng của bạn. Nếu không, bạn phải viết thói quen sắp xếp của riêng mình. –

+0

Tôi xin lỗi, nhưng tôi đã không hiểu nó: (Đây là lần đầu tiên tôi đối phó với mảng phân loại vì vậy tôi không có ý tưởng :( – pmerino

Trả lời

17

Tôi sẽ đặt hai mảng vào từ điển làm khóa và giá trị. Sau đó, bạn có thể sắp xếp mảng đầu tiên (hoạt động như các phím trong từ điển) và nhanh chóng truy cập các giá trị của từ điển theo cùng thứ tự. Lưu ý rằng điều này sẽ chỉ hoạt động nếu các đối tượng trong mảng đầu tiên hỗ trợ NSCopying vì đó là cách hoạt động của NSDictionary.

Mã sau nên thực hiện. Nó thực sự khá ngắn vì NSDictionary cung cấp một số phương pháp tiện lợi tốt đẹp.

// Put the two arrays into a dictionary as keys and values 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:secondArray forKeys:firstArray]; 
// Sort the first array 
NSArray *sortedFirstArray = [[dictionary allKeys] sortedArrayUsingSelector:@selector(compare:)]; 
// Sort the second array based on the sorted first array 
NSArray *sortedSecondArray = [dictionary objectsForKeys:sortedFirstArray notFoundMarker:[NSNull null]]; 
+3

Mã rất đẹp, nhưng không xử lý các trường hợp khi các phím không độc nhất. –

8

Thay vì giữ hai mảng song song, tôi sẽ giữ một mảng đối tượng mô hình duy nhất. Mỗi số từ mảng đầu tiên sẽ là giá trị của một thuộc tính và mỗi chuỗi từ mảng thứ hai sẽ là giá trị của thuộc tính khác. Sau đó bạn có thể sắp xếp trên một hoặc cả hai thuộc tính bằng cách sử dụng sort descriptors.

Nói chung, trong Cocoa và Cocoa Touch, các mảng song song làm việc trong khi các đối tượng mô hình lưu công việc. Ưu tiên thứ hai hơn bất kỳ nơi nào bạn có thể.

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