从洗牌的NSMutableArray中拉出整数

时间:2014-06-02 14:34:33

标签: objective-c ios7

好吧,我知道有很多重复的问题,询问如何在没有任何重复的情况下对数组进行随机播放或随机化,但只是给它一个机会。我已经洗牌了NSMutableArray。我想要做的就是使用混洗数组中的前三个值索引一个不同的数组。

因此,假设我的非混洗数组由1-10组成,我的混洗数组中的前三个值为0,5,2。当我索引时,这应该给我1,6和3。相反,我收到三个数字,如146945920,182301921等。如何使用混洗数组的前三个值正确索引数组。这是我的代码。

    NSUInteger n = [chefLetter[indexPath.row][@"cuisines"] count]; //its count is 3
    NSMutableArray *numbers = [NSMutableArray array];
    for (int i = 0; i < n; i++) {
        [numbers addObject:[NSNumber numberWithInt:i]];
    }

    //numbers should return something like 0,2,1 

    for (int i = 0; i < numbers.count; i++) {
        NSUInteger randomInt1 = arc4random() % [numbers count];
        NSUInteger randomInt2 = arc4random() % [numbers count];
        [numbers exchangeObjectAtIndex:randomInt1 withObjectAtIndex:randomInt2];
    }

    NSLog(@"%@",numbers);
    NSUInteger one = (unsigned long)[numbers objectAtIndex:0];
    NSLog(@"%lu",(unsigned long)one);

2 个答案:

答案 0 :(得分:1)

以下两行是问题所在。

NSUInteger one = (unsigned long)[numbers objectAtIndex:0];
NSLog(@"%lu",(unsigned long)one);

第一行从数组中提取NSNumber,并将指针转换为该数字为unsigned long。第二行打印指针。你想要的是

NSLog( @"%d", [numbers[0] intValue] );

答案 1 :(得分:0)

数组包含对象(在您的情况下为NSNumber),而不是普通的int值。您需要获取整数值才能显示它们:

NSUInteger one = [numbers[0] unsignedLongValue];