2011-09-23 119 views
1

我在这里有一个情况,我有两个数组,array1和array2和一个tableview。我已经将array1加载到表视图。所以在这里,我正在排序array2,我已经这样做了,但是我怎么能根据array2中的更改对array1进行排序并在tableview中重新加载array1。这是我需要排序array1自动排序array2时。 有什么建议吗?请分享你的想法。 谢谢:)排序数组与另一个数组的排序iphone sdk

+0

而如何排序依赖于彼此? – Nekto

+0

这是这里的问题,两个阵列没有互相连接。数组2中的内容是日期,所以我可以将此比较与NSDate进行排序。那么,是否有任何方法来排列array1中的行,关于array2中的更改?我不确定,但是如果我们考虑两个数组的行号?任何想法? – Mithun

+0

我有一个方法, - (void)replaceObjectsAtIndexes:(NSIndexSet *)索引withObjects:(NSArray *)对象。它工作吗?如果是,你能提供一些样品吗?当应用启动时,默认为 – Mithun

回答

2

逻辑上的建议是,如果对象被排序在一起,那么它们就会以某种方式相关,并且这两个数据片段应该符合一个新对象(一个字典,一个NSObject,不管)。

我的意思是,如果是ARRAY1和[1, 5, 4, 3, 2]是数组2 ["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

好的逻辑,我认为这应该起作用。你的意思是将两个数组加载到带有键值的字典中并进行排序? – Mithun

+0

你的第二意见是好的,如果可能的话,你会提供任何样品吗? – Mithun

+0

我仍在检查第二个选项是否可能。第一个选项意味着这两个数据块都属于同一个对象,所以您应该考虑将每个单独的数据对分组在一起,您在这些数组中存储了什么? – Can

0

需要更多的信息(源代码或psudo)来确定如何/何时/何地array2的排序发生以回答array1如何排序;但一旦阵列1被弄排序,可以重新装载值到表:

[myTable reloadData]; 

它将重新加载每一行和每一细胞,在他们的排序顺序读阵列1的值。

+0

,array1应该加载到表中。当我点击排序按钮时,需要对array2进行排序,当它完成时,针对array2中的更改对array1进行排序,然后重新加载表。 – Mithun