-1

我有 3 个 MutableArray 的名称:

  • 电视节目
  • 电视网络
  • tvdbID

我需要按电视节目的名称对它们进行排序。但需要保持联系。所以例如:

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;

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

4

5 回答 5

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]];
于 2013-03-04T20:24:10.747 回答
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];
}];

也就是说,如果您想按节目名称排序。如果您想按网络排序,您可以交换networkshowName

于 2013-03-04T20:23:47.257 回答
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]);
}
于 2013-03-04T20:21:40.460 回答
1

不知道您的最终目标是什么,但您可能应该创建一个 TVShow 类,该类具有“title”、“network”和“dbid”的属性(即实例变量)。然后,您可以实例化三个具有适当属性的 TVShow 对象,将它们放入一个可变数组中,并使用 NSMutableArray 上的一种排序方法——我可能会选择sortUsingComparator:.

于 2013-03-04T20:22:38.990 回答
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"];
于 2013-03-04T20:45:04.423 回答