关于另一个阵列iphone sdk的排序排序数组

时间:2011-09-23 06:12:13

标签: iphone uitableview nsmutablearray sorting

我有一个情况,我有两个数组,array1和array2以及一个tableview。我已将array1加载到表视图中。所以在这里,我正在排序array2,我已经完成了,但是如何根据array2中的更改对array1进行排序并在tableview中重新加载array1。那就是我需要在排序array2时自动对array1进行排序。 有任何想法吗?请分享你的想法。 谢谢:))

2 个答案:

答案 0 :(得分:2)

逻辑建议是,如果对象被排序在一起,那么它们就会以某种方式相关,并且这两个数据应该符合新对象(字典,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?)"

答案 1 :(得分:0)

需要更多信息(源代码或psudo)来确定如何/何时/在何处进行数组2的排序以回答如何对数组进行排序;但是一旦array1确实被排序,您可以使用以下命令将值重新加载到表中:

[myTable reloadData];

它将重新加载每一行和单元格,按排序顺序读取array1的值。