我正在尝试解决以下排序和分离问题,我有一个ID为1,2,3,4,5,3,2,1的数组。
使用NSPredicate对该数组进行排序非常简单,但我如何在单独的子数组中分隔相同的ID,如[[1,1] [2,2,],[3,3],[4],[5] ]]?我想一个选项是循环排序的数组并比较以前的索引ID,但我想知道iOS中是否存在任何辅助函数,我目前正在阅读有关NSOrderedSet的内容,但似乎无法找到它是否可以提供帮助。
答案 0 :(得分:3)
在Swift中,使用函数式编程:
let indexes = [1,2,3,4,5,3,2,1]
let notRepeatedIndexesSet = Set(indexes)
let notRepeatedIndexesArray = Array(notRepeatedIndexesSet).sorted(<)
let yourArray = notRepeatedIndexesArray.map{
number -> [Int] in
Array(count: indexes.filter { $0 == number }.count, repeatedValue:number)
}
答案 1 :(得分:2)
有序集和计数集的组合:
NSArray *array = @[@1,@2,@3,@4,@5,@3,@2,@1];
NSOrderedSet *os = [[NSOrderedSet alloc] initWithArray:array];
NSCountedSet *cs = [[NSCountedSet alloc] initWithArray:array];
NSMutableArray *sortedArray = [@[] mutableCopy];
[os enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSMutableArray *countArray = [@[] mutableCopy];
for (int i = 0; i < [cs countForObject:obj]; ++i) {
[countArray addObject:obj];
}
[sortedArray addObject:[countArray copy]];
}];