Tôi đã viết một phương pháp nhanh chóng để mất một mảng nguồn (các đối tượng là tất cả ra về trật tự) và một mảng tài liệu tham khảo (có đối tượng trong một mong muốn (và hoàn toàn tùy ý) thứ tự) và trả về một mảng trong đó các mục của mảng nguồn đã được sắp xếp lại để phù hợp với mảng tham chiếu.
- (NSArray *) reorderArray:(NSArray *)sourceArray toArray:(NSArray *)referenceArray
{
NSMutableArray *returnArray = [[NSMutableArray alloc] init];
for (int i = 0; i < [referenceArray count]; i++)
{
if ([sourceArray containsObject:[referenceArray objectAtIndex:i]])
{
[returnArray addObject:[arrReference objectAtIndex:i]];
}
}
return [returnArray copy];
}
Lưu ý rằng điều này rất mong manh. Nó sử dụng phương thức containsObject:
của NSArray
, cuối cùng sẽ gọi NSObject
's isEqual:
. Về cơ bản, nó sẽ hoạt động tốt đối với các mảng NSString
s, NSNumber
s và có thể là NSDate
s (chưa thử), nhưng bên ngoài đó, YMMV. Tôi tưởng tượng nếu bạn cố gắng vượt qua mảng UITableViewCell
s hoặc một số đối tượng thực sự phức tạp khác, nó sẽ hoàn toàn sh * t chính nó, và một trong hai tai nạn hoặc trả lại tổng số rác thải. Tương tự như vậy nếu bạn đã làm một cái gì đó như vượt qua một mảng của NSDate
s làm mảng tham chiếu và một mảng của NSString
s làm mảng nguồn. Ngoài ra, nếu mảng nguồn chứa các mục không nằm trong mảng tham chiếu, chúng sẽ bị loại bỏ. Người ta có thể giải quyết một số vấn đề này bằng cách thêm một chút mã.
Tất cả những gì đã nói, nếu bạn đang cố gắng làm điều gì đó đơn giản, nó sẽ hoạt động tốt. Trong trường hợp của bạn, bạn có thể xây dựng mảng tham chiếu khi bạn đang lặp qua setValue:forKey:
của mình.
NSMutableArray *referenceArray = [[NSMutableArray alloc] init];
NSMutableDictionary *yourDictionary = [[ NSMutableDictionary alloc] init];
for (//whatever you are looping through here)
{
[yourDictionary setValue://whatever forKey:key];
[referenceArray addObject:key];
}
Sau đó, khi bạn muốn để lặp qua các mục của bạn theo thứ tự họ bước vào, bạn chỉ
for (NSString *key in [self reorderArray:[myDict allKeys] toArray:referenceArray])
Các phím không cố định, chúng là động. – Matrix