この配列はどのように数えますか?多次元配列で数えます
NSArray *sortThisArray = @[@{@"numbers":@[@"One",@"Two"]},
@{@"numbers":@[@"Two",@"One"]},
@{@"numbers":@[@"One",@"Two",@"Three"]},
@{@"numbers":@[@"One",@"Two",@"Three"]},
@{@"numbers":@[@"One",@"Two",@"Three",@"Four"]},
];
望ましい結果は次のようになります。
NSArray *sortedArray = @[@{@"numbers":@[@"One",@"Two"],
@"occures":@(2)},
@{@"numbers":@[@"One",@"Two",@"Three"],
@"occures":@(2)},
@{@"numbers":@[@"One",@"Two",@"Three",@"Four"],
@"occures":@(1)},
];
私はNSCountedSet
とcountForObject
を使用して試してみたが、結果は不正確です。まったく同じ配列しか数えていないようです。つまり、@[@"Two",@"One"]
の配列は、同じオブジェクトと同じ数を持っていても、@[@"One",@"Two"]
と100%ではないため、無視されます。
NSMutableArray *mArray = [NSMutableArray arrayWithArray:sortThisArray];
NSMutableArray *result = [[NSMutableArray alloc] init];
while ([mArray count]) {
NSDictionary *obj = [mArray firstObject];
int count = 1;
for (int i=1; i<[mArray count]; i++) {
NSDictionary *sObj = [mArray objectAtIndex:i];
if ([[sObj objectForKey:@"numbers"] count] == [[obj objectForKey:@"numbers"] count]) {
BOOL increase = YES;
for (int j=0; j<[[obj objectForKey:@"numbers"] count]; j++) {
if (![[sObj objectForKey:@"numbers"] containsObject:[[obj objectForKey:@"numbers"] objectAtIndex:j]]) {
increase = NO;
}
}
if (increase) {
count++;
[mArray removeObjectAtIndex:i];
}
}
}
[mArray removeObjectAtIndex:0];
[result addObject:@{@"numbers":obj, @"occurrs":[NSNumber numberWithInteger:count]}];
}
*コードは、これは動作するはず
試してみましたが、動作していないようです...結果の配列に重複が残っています –