我有一个大的NSArray名称,我需要从该数组中随机获得4条记录(名称),我该怎么做?从nsarray获得n个随机对象(例如4)
11
A
回答
21
#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--;
}
}
}
2
我做了一个叫NSArray+RandomSelection
类别..。就在这个类别导入到一个项目,然后只需用
NSArray *things = ...
...
NSArray *randomThings = [things randomSelectionWithCount:4];
这里的实现:
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
2
如果你喜欢一个斯威夫特框架 t帽子也有一些更方便的功能,可随时结账HandySwift。您可以通过迦太基将其添加到您的项目然后使用它是这样的:
import HandySwift
let names = ["Harry", "Hermione", "Ron", "Albus", "Severus"]
names.sample() // => "Hermione"
还有一种选择,在一次得到多个随机元素:
names.sample(size: 3) // => ["Ron", "Albus", "Harry"]
我希望这有助于!
相关问题
- 1. 删除N个随机对象Django orm
- 2. 从NSArray的NSDictionary对象,如何获得独特的NSArray
- 3. Android获得4个随机数
- 4. SQL Server CE 4 - 如何从表中选择n个随机行?
- 5. 如何从NSSet实例中检索一个随机对象?
- 6. 如何分组查询并随机获得第n个项目
- 7. 从数组中获取随机对象
- 8. 在NSArray中选取一个随机对象
- 9. 如何从android中的firebase数据库中获得一个随机对象?
- 10. 获得一个随机的项目从
- 11. android如何从10个图像数组中随机获得4个图像
- 12. SQL从n个组获得均匀分布 - 获取随机物品
- 13. 如何乘以NSArray的各个对象并获得总和?
- 14. 如何随机化NSArray?
- 15. 如何获得随机序列从案例
- 16. HandlebarsJS如何从JSON获得随机值
- 17. 查询获得每个商店随机4个产品
- 18. 获得N个随机数,总和为M
- 19. 从数组获取不同ID对象的随机对象C#
- 20. 如何获得随机数
- 21. 如何从字符串中的数组中获得随机对象
- 22. 如何随时获得随机列表?
- 23. 获取从嵌套对象10个随机项目不重复
- 24. 从5个对象之一随机获取数据
- 25. 如何从n个Children/Subchildren等获得一个CustomObject的所有子对象
- 26. 如何生成一个随机对象?
- 27. 如何生成一个随机数字以获得数组中的随机对象
- 28. 如何从Firebase数据库获取随机对象?
- 29. 从4个表中随机挑选
- 30. Android随机对象
不要忘记种子... – 2011-04-30 06:00:50
是的,我刚刚用arc4random()替换了rand(),这是优越的,不需要播种。 – 2011-04-30 06:03:59
谢谢,它工作正常。但是,我认为,采摘名应该是NSMutableArray – 2011-04-30 06:05:54