排序多个NSMutableArray

时间:2013-03-04 20:15:07

标签: iphone ios objective-c

我有3个MutableArray命名为:

  • tvShows
  • tvNetworks
  • tvdbID

我需要按照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;

我该怎么做?这是我的第一个应用程序,如果这是一个非常简单的问题,那就很抱歉。

5 个答案:

答案 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"];