【问题标题】:Split an NSArray into a fixed size and the rest将 NSArray 拆分为固定大小,其余部分
【发布时间】:2017-09-13 09:22:17
【问题描述】:

我的项目中有一个NSArray,它有近 12 个元素。我想将此数组拆分为 2 个数组。我想要第一个数组中的前 3 个元素和第二个 NSArray 中的其余元素。

【问题讨论】:

    标签: ios cocoa-touch nsarray


    【解决方案1】:

    基于the answer of Alex Reynolds

    您应该创建一个长度为 3 的范围,并用它创建数组的前半部分,然后修改其位置和长度并创建数组的后半部分。

    NSArray *firstThreeArray;
    NSArray *otherArray;
    NSRange threeRange;
    
    threeRange.location = 0;
    threeRange.length = 3;
    
    firstThreeArray = [wholeArray subarrayWithRange:threeRange];
    
    threeRange.location = threeRange.length;
    threeRange.length = [wholeArray count] - threeRange.length;
    
    otherArray = [wholeArray subarrayWithRange:threeRange];
    

    【讨论】:

    • 如果我的数组有 n 个元素,我该如何定义第二个数组的范围
    • 如果数组有超过 3 个元素,这已经适用于每个数组计数。
    【解决方案2】:

    作为NSArray的一个类别:

    @implementation NSArray (NSArray_Slicing)
    
    - (NSArray *)subarraysFromIndex:(int)index {
        return @[[self sliceToIndex:index], [self sliceFromIndex:index]];
    }
    
    
    - (NSArray *)sliceFromIndex:(int)index {
        NSMutableArray*mutArray = [self mutableCopy];
        NSRange range = NSMakeRange(index, self.count - index);
        return [mutArray subarrayWithRange:range];
    }
    
    
    - (NSArray *)sliceToIndex:(int)index {
        NSMutableArray*mutArray = [self mutableCopy];
        NSRange range = NSMakeRange(0, index);
        return [mutArray subarrayWithRange:range];
    }
    
    @end
    

    然后调用它:

    NSArray *array = @[@1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12];
    NSLog(@"First three: %@", [array sliceToIndex:3]);
    NSLog(@"Remaining:   %@", [array sliceFromIndex:3]);
    NSLog(@"Sliced:      %@", [array subarraysFromIndex:3]);
    NSLog(@"Original:    %@", array);
    

    【讨论】:

    • 不需要制作额外的副本。 subarrayWithRange: 已经创建并返回了一个新数组。
    • 出于演示目的不需要,但我想在这些方法中添加一些范围检查以避免异常。
    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多