내부에 50-100 개의 객체가있는 NSArray가 있다고 가정 해 보겠습니다. 어떻게 배열을 임의의 순서로 넣을 수 있습니까?NSArray를 랜덤 화하는 방법은 무엇입니까?
답변
방법에는 여러 가지가 있지만 대부분은 단순히 난수 생성과 관련됩니다. 아마도 당신이있는 NSMutableArray를 사용하여이 기술을 사용할 수 있습니다
- 는 어떤 수는
- 1 사이의 난수를 생성 생성
- 스왑 요소 0을 (50 개 요소를 가정) 0에서 49 사이의 난수를 생성 당신이
- 등
을 생성 어떤 수를 49 개
샘플 코드 (테스트하지) : 또한
srandom(time(NULL));
for (NSInteger x = 0; x < [array count]; x++) {
NSInteger randInt = (random() % ([array count] - x)) + x;
[array exchangeObjectAtIndex:x withObjectAtIndex:randInt];
}
, 당신은 무작위로 하나를 선택, 첫 번째 개체가 동안을 통해이있는 NSMutableArray 개체, 단순히 루프를 사용하고, 기타의 말미에 추가 할 수 있습니다 하나. 장소 방법은 아마 더 빠릅니다.
arc4random()을 사용하는 것이 훨씬 낫습니다! – nonamelive
이것은 Fisher-Yates 알고리즘의 버전입니다. http://en.wikipedia.org/wiki/Fisher-Yates_shuffle – JeremyP
is arc4random slower? – wahkiz
NSArray *test = [NSArray arrayWithObjects:@"AA",@"BC",@"DE",@"EG",@"FA",@"GQ",@"DA"];<br>
NSSet *testset = [NSSet setWithArray:test];
NSArray *randomorder = [testset allObjects];
NSLog(@"random : %@",randomorder);<br><br>
분명히 NSSet에 대한 색인이 없습니다. 따라서 NSArray 객체는 NSSet으로 변환 될 때 뒤죽박죽이 될 수 있습니다. 그것은 해킹 솔루션이지만 작동합니다 (이것에 대해서는 확실하지 않습니다).
집합에 중복 개체를 넣으면 어떻게됩니까? –
내가 광범위하게 검색하여 중복 스레드를 찾을 수 없었기 때문에이 질문을 제출 한 이유는 그 이유입니다. 링크 주셔서 감사합니다! –