按ID对数组进行排序,并在数组中分隔相同的ID

时间:2015-03-28 21:16:27

标签: ios

我正在尝试解决以下排序和分离问题,我有一个ID为1,2,3,4,5,3,2,1的数组。

使用NSPredicate对该数组进行排序非常简单,但我如何在单独的子数组中分隔相同的ID,如[[1,1] [2,2,],[3,3],[4],[5] ]]?我想一个选项是循环排序的数组并比较以前的索引ID,但我想知道iOS中是否存在任何辅助函数,我目前正在阅读有关NSOrderedSet的内容,但似乎无法找到它是否可以提供帮助。

2 个答案:

答案 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)
}

enter image description here

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