在tableview中排序数组
Posted
技术标签:
【中文标题】在tableview中排序数组【英文标题】:sorting array in tableview 【发布时间】:2011-03-27 02:02:34 【问题描述】:我有一个数组和一个从数组中获取数据的表视图。当我在 iPhone 上查看 tableview 时,它的 ofc 未排序,并且按照我编写的方式列出。
我想在 tableview 中对我的数组进行排序,所以它们不会像这样列出:
D 一个 G F S但改为这样列出:
一个 B C D E 等等……我该怎么做?
这是我的数组:
stationList = [[NSMutableArray alloc] init];
[stationList addObject:@"A"];
[stationList addObject:@"B"];
[stationList addObject:@"C"];
如何将数组加载到我的 tableview 数组中? 加载数组:
NSString *cellValue = [stationList objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
【问题讨论】:
阅读 NSMutableArray 的 API 文档 - 有排序方法。或 Google 搜索“排序 nsmutablearray”。 【参考方案1】:使用[stationList sortUsingFunction:compareLetters context:whateveryouwant_ornil]
和
NSComparisonResult compareLetters(id t1, id t2, void* context)
do the tests you want beetween t1 and t2, and return the result
like :
if (the test) return NSOrderedDescending, NSOrderedAscending or NSOrderedSame
在您的示例中,您应该这样做:
NSMutableArray stationList = [[NSMutableArray array];
[stationList addObject:@"A"];
[stationList addObject:@"B"];
[stationList addObject:@"C"];
[stationList sortUsingFunction:compareLetters context:nil];
NSComparisonResult compareLetters(id t1, id t2, void* context)
return [t1 compare:t2];
【讨论】:
“在 t1 和 t2 之间做你想要的测试,并且”是什么意思?我应该做什么测试?对不起,如果这是一个愚蠢的问题 @Patrick R :这取决于您要排序的内容。如果你对字符串进行排序,调用 [t1 compare:t2],如果你测试整数,测试 t1 == t2,如果你测试自定义对象,你是唯一知道必须测试什么的人,比如 t1.age 和 t2。年龄,... @Patrick R :将自动为多对数组值调用比较函数,直到对整个内容进行排序。您只需要测试并返回 2 个参数是如何相互排序的 即时测试字符串.. soo.. 它需要“做 [t1 compare:t2]”?对不起,但我不喜欢objective-c:/ @Patrick R :查看我的编辑。 NSString 之间的比较函数已经返回 NSOrderedDescending、NSOrderedAscending 或 NSOrderedSame。所以很容易。对于这样一个简单的案例,我相信有一种更简单的方法,但是这个方法有效,并且可以重复用于其他类型的内容。你知道 AppKiDo 软件吗?如果你不这样做,你应该看看它,这将是一个很大的帮助。【参考方案2】:转到下面的教程对NSArray
进行排序,他们已经解释了对NSArray
进行排序的基本技术。
您也可以下载教程末尾提供的示例代码。 Here is the link.
【讨论】:
【参考方案3】:您可以使用一些简单的步骤。我正在使用的。我不确定它在内存消耗方面是否完美。但它在我的应用程序中与我一起工作。
这里的记录是 NSMutableArray。 Columnname 在您要排序的哪个 Coulmn 上。就我而言,我有不止一列要排序。排序需要 BOOL 数据。
酸痛后,我正在重新加载我的 TableView。
NSSortDescriptor * frequencyDescriptor = [[NSSortDescriptor alloc] initWithKey:columnName ascending:YES];
NSArray * descriptors = [NSArray arrayWithObjects:frequencyDescriptor, nil];
[record sortUsingDescriptors:descriptors];
[columnName release];
[frequencyDescriptor release];
[myTableView reloadData];
我希望这很好。如果我能做得更好,请告诉我
【讨论】:
以上是关于在tableview中排序数组的主要内容,如果未能解决你的问题,请参考以下文章