Сортировать массив относительно сортировки другого массива iphone SDK - PullRequest
1 голос
/ 23 сентября 2011

У меня есть ситуация здесь, у меня есть два массива, array1 и array2 и один просмотр таблицы.Я загрузил массив1 в табличном представлении.Итак, я сортирую array2, я сделал это, но как я могу отсортировать array1 относительно изменений в array2 и перезагрузить array1 в tableview.То есть мне нужно отсортировать array1 автоматически при сортировке array2.Есть идеи?Пожалуйста, поделитесь своими мыслями.Спасибо:)

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Логическим советом будет то, что если объекты отсортированы вместе, то они как-то связаны, и обе части данных должны соответствовать новому объекту (словарь, объект NSObject и т. Д.).

Я имею в виду, что если array1 - [1, 5, 4, 3, 2], а array2 - ["hello", "world", "big", "little", "my"], то смешанный массив будет иметь вид:

[(1, "hello"), (5, "world"), (4, "big"), (3, "little"), (2, "my")].

Сортировать это тривиально, и имеет смысл, еслиданные коррелированы (невозможно сказать, так как вы не указали это).

Пример Objective-C

Пользовательский объект (CustomObject.h), который содержит как имя / номер (используячисло в качестве простого примера):

@interface CustomObject : NSObject

@property (nonatomic,retain) NSString *name;
@property (nonatomic,assign) NSInteger number;

+ (id)customObjectWithName:(NSString*)name andNumber:(NSInteger)number;

@end

CustomObject.m:

#import "CustomObject.h"

@implementation CustomObject

@synthesize name, number;

+ (id)customObjectWithName:(NSString*)name andNumber:(NSInteger)number
{
    CustomObject *customObject = [[CustomObject alloc] init];

    customObject.name = name;
    customObject.number = number;

    return customObject;
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"(Number:%d, Name:%@)", self.number, self.name];
}

- (void)dealloc
{
    [name release];
    [super dealloc];
}

@end

Использование этих объектов вместе с сортировкой:

NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:
                            [CustomObject customObjectWithName:@"Hello" andNumber:1], 
                            [CustomObject customObjectWithName:@"gentlemen?" andNumber:5], 
                            [CustomObject customObjectWithName:@"you" andNumber:4],
                            [CustomObject customObjectWithName:@"are" andNumber:3], 
                            [CustomObject customObjectWithName:@"how" andNumber:2],
                                nil];

[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2)
{
    return [(CustomObject*)obj1 number] - [(CustomObject*)obj2 number];
}];

NSLog(@"Results: %@", array);

Вывод выглядит следующим образом:

2011-09-23 03:27:14.388 Test[5942:b303] Results: (
"(Number:1, Name:Hello)",
"(Number:2, Name:how)",
"(Number:3, Name:are)",
"(Number:4, Name:you)",
"(Number:5, Name:gentlemen?)"
0 голосов
/ 23 сентября 2011

Потребуется дополнительная информация (исходный код или псевдо), чтобы определить, как / когда / где происходит сортировка массива2, чтобы ответить, как можно отсортировать массив1; но когда массив1 отсортирован, вы можете перезагрузить значения в таблицу:

[myTable reloadData];

И он перезагрузит каждую строку и ячейку, считывая значения array1 в их отсортированном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...