我有一个情况,我有两个数组,array1和array2以及一个tableview。我已将array1加载到表视图中。所以在这里,我正在排序array2,我已经完成了,但是如何根据array2中的更改对array1进行排序并在tableview中重新加载array1。那就是我需要在排序array2时自动对array1进行排序。 有任何想法吗?请分享你的想法。 谢谢:))
答案 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")]
。
对此进行排序是微不足道的,如果数据是相关的则是有意义的(由于您没有指定这一点,因此无法告诉)。
包含名称/编号的自定义对象(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的值。