Подтвердить что ты не робот

Получить случайный объект из массива

Я хочу получить случайный объект из массива, есть ли способ найти случайный объект из изменяемого массива?

4b9b3361

Ответ 1

@interface NSArray (Random)
- (id) randomObject;
@end

@implementation NSArray (Random)

- (id) randomObject
{
     if ([self count] == 0) {
         return nil;
     }
     return [self objectAtIndex: arc4random() % [self count]];
}

@end

Ответ 2

id obj;    
int r = arc4random() % [yourArray count];
    if(r<[yourArray count])
      obj=[yourArray objectAtIndex:r];
   else
   {
     //error message
   }

Ответ 3

id randomObject = nil;
if ([array count] > 0){
    int randomIndex = arc4random()%[array count];
    randomObject = [array objectAtIndex:randomIndex];
}

Ответ 4

Лучшим способом было бы сделать что-то вроде этого

int length = [myMutableArray count];
// Get random value between 0 and 99
int randomindex = arc4random() % length;

Object randomObj = [myMutableArray objectAtIndex:randomindex];

Ответ 5

Просто копировать и вставлять

-(NSMutableArray*)getRandomValueFromArray:(NSMutableArray*)arrAllData randomDataCount:(NSInteger)count {  
 NSMutableArray *arrFilterData = [[NSMutableArray alloc]init];
for(int i=0; i<count; i++){

     NSInteger index = arc4random() % (NSUInteger)(arrAllData.count);
    [arrFilterData addObject:[arrAllData objectAtIndex:index]];
    [arrAllData removeObjectAtIndex:index];
}
return arrFilterData;
}

Примечание: Count = количество случайных значений, которые вы хотите получить

Ответ 6

Здесь Swift solution с использованием расширения на массивах:

extension Array {
    func sample() -> Element? {
        if self.isEmpty { return nil }
        let randomInt = Int(arc4random_uniform(UInt32(self.count)))
        let randomIndex = self.startIndex.advancedBy(randomInt)
        return self[randomIndex]
    }
}

Вы можете использовать его так же просто, как это:

let digits = Array(0...9)
digits.sample() // => 6

Если вы предпочитаете Рамку, у которой также есть несколько более удобных функций, тогда проверьте HandySwift. Вы можете добавить его в свой проект через Carthage, а затем использовать его точно так же, как в приведенном выше примере:

import HandySwift    

let digits = Array(0...9)
digits.sample() // => 8

Ответ 7

Если вы не хотите расширять NSArray, это приведет к случайному значению из заданного массива в одной строке:

id randomElement = [myArray objectAtIndex:(arc4random() % myArray.count)];