-1

名前付きの MutableArray が 3 つあります。

  • テレビ番組
  • テレビネットワーク
  • 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

私なら、showName、network、および tvbdID のプロパティを持つ、TVShow という名前のカスタム NSObject を個人的に作成します。このように、各ショーの配列は 1 つだけです。配列が myShows と呼ばれると仮定すると、次のようなことができます。

[allShows sortUsingComparitor:^NSComparisonResult(id a, id b) {
    NSString *firstName = [(TVShow*)a showName];
    NSString *secondName = [(TVShow*)b showName];
    return [firstName compare: secondName];
}];

つまり、番組名で並べ替えたい場合です。ネットワークで並べ替えたい場合はnetwork、交換できます。showName

于 2013-03-04T20:23:47.257 に答える
1

3 つの独立した配列ではできませんが、キーがテレビ番組で、値が 2 つのキーを持つ辞書である 1 つの辞書を使用する可能性があります: 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

最終的な目標はわかりませんが、「タイトル」、「ネットワーク」、および「dbid」のプロパティ (インスタンス変数) を持つ TVShow クラスを作成する必要があります。次に、適切なプロパティを使用して 3 つの TVShow オブジェクトをインスタンス化し、それらを変更可能な配列に配置して、NSMutableArray の並べ替え方法の 1 つを使用できますsortUsingComparator:

于 2013-03-04T20:22:38.990 に答える
0

これを行う最も簡単で直接的な方法の1 つは、次のように1 つの辞書の配列を作成することです。

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 に答える