Tengo una gran NSArray de nombres, necesito obtener 4 registros (nombres) aleatorios de esa matriz, ¿cómo puedo hacer eso?Obtiene n objetos aleatorios (por ejemplo 4) de nsarray
Respuesta
#include <stdlib.h>
NSArray* names = ...;
NSMutableArray* pickedNames = [NSMutableArray new];
int remaining = 4;
if (names.count >= remaining) {
while (remaining > 0) {
id name = names[arc4random_uniform(names.count)];
if (![pickedNames containsObject:name]) {
[pickedNames addObject:name];
remaining--;
}
}
}
Hice un caregory llamado NSArray+RandomSelection
. Sólo tiene que importar esta categoría en un proyecto, y luego sólo tiene que utilizar
NSArray *things = ...
...
NSArray *randomThings = [things randomSelectionWithCount:4];
Aquí está la aplicación:
NSArray+RandomSelection.h
@interface NSArray (RandomSelection)
- (NSArray *)randomSelectionWithCount:(NSUInteger)count;
@end
NSArray+RandomSelection.m
@implementation NSArray (RandomSelection)
- (NSArray *)randomSelectionWithCount:(NSUInteger)count {
if ([self count] < count) {
return nil;
} else if ([self count] == count) {
return self;
}
NSMutableSet* selection = [[NSMutableSet alloc] init];
while ([selection count] < count) {
id randomObject = [self objectAtIndex: arc4random() % [self count]];
[selection addObject:randomObject];
}
return [selection allObjects];
}
@end
Si prefiere un marco Swift t El sombrero también tiene algunas características más prácticas. No dudes en pagar HandySwift. Puede añadirlo a su proyecto a través de Cartago luego usarlo como esto:
import HandySwift
let names = ["Harry", "Hermione", "Ron", "Albus", "Severus"]
names.sample() // => "Hermione"
También hay una opción para obtener múltiples elementos al azar a la vez:
names.sample(size: 3) // => ["Ron", "Albus", "Harry"]
Espero que esto ayude !
Esto no responde la pregunta ya que necesita mostrar cómo se puede usar la lista de números aleatorios para seleccione los nombres en la matriz grande para crear la matriz de nombres elegidos. – Droppy
Parece que mi respuesta fue engañosa. Lo he actualizado para usar una matriz de nombres como ejemplo en lugar de una matriz de números. Funciona igual, solo un tipo diferente de Array. Espero que esté claro ahora. – Dschee
- 1. Ejemplo de arquitectura de 4 niveles (para N-Tier)?
- 2. Obtiene cada n-elementos de la matriz
- 3. NSArray de objetos y Casting
- 4. ¿NSArray copia objetos?
- 5. Ejemplo de O (n!)?
- 6. NSArray lleno de objetos bool
- 7. Buscando NSArray de objetos NSDictionary
- 8. Generar números aleatorios de -n a n en C
- 9. Generador de objetos aleatorios JSON
- 10. Ordenar NSArray de objetos personalizados por sus propiedades NSDate
- 11. Filtrado NSArray de objetos NSDictionary utilizando NSPredicate
- 12. extrayendo propiedades de NSArray de los objetos
- 13. Cantidad máxima de objetos en NSArray
- 14. Filtrar una NSArray que contiene objetos personalizados
- 15. Ordenar NSArray con la costumbre objetos
- 16. Obtiene todos los objetos definidos por una relación Django ManyToManyField
- 17. ¿Cómo pluralizar "Hay/hay N objetos/objetos"?
- 18. ¿Cómo se obtiene la suma total de NSNumber de un NSArray?
- 19. Reemplazando "\ r \ n" por "\ n"
- 20. NSArray independiente a una lista de objetos de tipo NSString
- 21. Tamaño de un NSArray
- 22. Cómo agregar objetos a un NSArray usando for loop?
- 23. Cacao: deserializar json cadena a objetos personalizados (no NSDictionary, NSArray)
- 24. ¿La mejor manera de ordenar un NSArray de objetos NSDictionary?
- 25. ¿Cómo ordenar NSArray con objetos de diccionario alfabéticamente?
- 26. ¿Obtiene los primeros N elementos de una matriz?
- 27. Generación de números aleatorios distribuidos
- 28. objetos Restar en uno NSArray de otra matriz
- 29. Entity Framework Query - Obtiene objetos en orden específico
- 30. Obtiene los N registros superiores utilizando LINQ para Entidades
No olvides sembrar ... –
Es cierto, acabo de reemplazar rand() por arc4random() que es superior y no necesita siembra. –
Gracias, funciona bien. Pero, creo que pickedNames debería ser NSMutableArray –