如何从目标C中的较大数组中选择较小的数组?

时间:2012-08-12 16:12:32

标签: objective-c ios

我需要从75个对象的NSMutableArray中选择32个不同的对象。它可以是1到32,2到33或10到42.我应该使用哪些函数来获取新数组?抱歉是noob。

2 个答案:

答案 0 :(得分:3)

如果您想要随机索引中的N个连续对象,请尝试以下操作:

NSArray *arrayWithNConsecutiveObjects(NSArray *arr, int n)
{
    int subIdx = arc4random_uniform((unsigned) (arr.count - n));

    return [arr subarrayWithRange:NSMakeRange(subIdx, n)];
}

如果需要32个随机对象,可以扩展此方法以对数组进行随机排序:

NSArray *arrayWithNObjects(NSArray *arr, int n)
{
    arr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        // random sort
        return arc4random_uniform(3) - 1; // one of -1, 0, and 1
    }];

    int subIdx = arc4random_uniform((unsigned) (arr.count - n));

    return [arr subarrayWithRange:NSMakeRange(subIdx, n)];
}

答案 1 :(得分:2)

您可以使用从NSArray继承的适当方法来检索32个连续元素的切片:

int offset = 4;
NSArray *slice = [array subarrayWithRange:NSMakeRange(offset, offset+32)];