我有3个MutableArray命名为:
我需要按照tvShows的名称对它们进行排序。 但需要保持联系。 例如:
tvShows = Breaking Bad, House, Community;
tvNetworks = AMC, FOX, NBC;
tvdbID = 81189, 73255, 94571;
需要成为:
tvShows = Breaking Bad, Community, House;
tvNetworks = AMC, NBC, FOX;
tvdbID = 81189, 94571, 73255;
我该怎么做?这是我的第一个应用程序,如果这是一个非常简单的问题,那就很抱歉。
答案 0 :(得分:3)
将它们存储在一个字典数组中,然后使用NSArray排序函数排序:(下面)
NSDictionary * dict1 = @{@"title":@"breaking bad",@"network":@"AMC",@"tvbdID":@(81189)};
NSDictionary * dict2 = @{@"title":@"house",@"network":@"FOX",@"tvbdID":@(73255)};
NSDictionary * dict3 = @{@"title":@"Community",@"network":@"NBC",@"tvbdID":@(94571)};
NSArray * array = @[dict1,dict2,dict3];
NSSortDescriptor * desc = [NSSortDescriptor sortDescriptorWithKey:@"title"ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray * sortedArray = [array sortedArrayUsingDescriptors:@[desc]];
答案 1 :(得分:2)
我个人会创建一个名为TVShow的自定义NSObject,它具有showName,network和tvbdID的属性。这样,每个节目只有一个数组。假设您的数组名为myShows,您可以执行以下操作:
[allShows sortUsingComparitor:^NSComparisonResult(id a, id b) {
NSString *firstName = [(TVShow*)a showName];
NSString *secondName = [(TVShow*)b showName];
return [firstName compare: secondName];
}];
也就是说,如果您想按节目名称排序。如果您想按网络排序,可以将network
换成showName
!
答案 2 :(得分:1)
你不能用3个独立的阵列来做,但可能有1个字典,其中键是电视节目,价值是带2个键的字典:tvNetworks& tvdbIDs
样品:
NSDictionary *data = @{@"Breaking Bad":@{@"tv" : @"AMC", @"tvdb": @(81189)},
@"House":@{@"tv" : @"FOX", @"tvdb": @(73255)},
@"Community":@{@"tv" : @"NBC", @"tvdb": @(94571)}};
NSArray *sortedShows = [data.allKeys sortedArrayUsingSelector:@selector(compare:)];
for (id show in sortedShows) {
NSLog(@"%@ = %@", show, data[show]);
}
答案 3 :(得分:1)
不知道你的目标是什么,但你应该创建一个TVShow类,它具有“title”,“network”和“dbid”的属性(即实例变量)。然后你可以用适当的属性实例化三个TVShow对象,把它们放在一个可变数组中,并使用NSMutableArray上的一个排序方法 - 我可能会选择sortUsingComparator:
。
答案 4 :(得分:0)
最简单,最直接的方法之一就是创建一个字典数组,如下所示:
NSMutableArray *tvShowInfos = [NSMutableArray array];
for (NSInteger i = 0; i < tvShows.count; i++) {
NSDictionary *info = @{@"show": [tvShows objectAtIndex:i],
@"network": [tvNetworks objectAtIndex:i],
@"id": [tvdbIDs objectAtIndex:i]};
[tvShowInfos addObject:info];
}
然后您可以轻松地对该数组进行排序:
[tvShowInfos sortUsingDescriptors:@[ [[NSSortDescriptor alloc] initWithKey:@"show" ascending:YES] ]];
如果您需要一个包含所有网络的数组(按节目标题排序),则可以在字典数组中使用valueForKey:
:
NSArray *networksSortedByShow = [tvShowInfos valueForKey:@"network"];