2013-03-18 2 views
0

메시지가 표시되면 여러 개의 동영상을 재생해야하는 앱이 있지만 동영상을 무작위로 반복하고 싶습니다.반복하지 않고 무작위로 동영상을 재생할 수있는 방법

나의 현재 계획은 키가 비디오의 숫자 인 NSMutableDictionary를 만드는 것이며, 값은 재생 여부를 알려주는 기본 문자열 일뿐입니다. 그런 다음 비디오를 재생할 때 임의로 하나를 선택하여 재생했는지 확인합니다. 좋아요 :

int randomNumber; 
randomNumber = (arc4random() % 150) + 1; 
if ([[videoDictionary valueForKey:[NSString stringWithFormat:@"%d", randomNumber]] isEqual:@"Played"]) 
{ 
    // This video has been played before. Make another random number and try again 
} else { 
    // This video has not been played before. Set the dictionary value to 'Played' and play the video 
} 

더 좋은 방법이 있나요? 100 개가 넘는 비디오를 사용하면 90 %가 이미 재생되었을 때 약간의 재주가 생길 수 있습니다.

+0

아마도 Anoop Vaidya의 답변이 도움이 될 것입니다. 개인적으로 비디오 배열을 가지고 셔플 한 다음 배열을 따라 곧바로 반복합니다 (끝까지 갈 때 다시 섞습니다). 그냥 내 두 센트. – jonhopkins

+0

@jonhopkins : 당신의 대답조차도 좋습니다 :) –

답변

3
  • 모든 번호 변경 가능한 배열을 만듭니다로

    그래서이 경우 당신은 할 수 있습니다.

  • 은 (What's the Best Way to Shuffle an NSMutableArray?)
  • 이 배열의 첫 번째 요소를 가지고 재생 비디오
  • 를 배열
  • 에서 첫 번째 요소를 제거 배열이 빈 재 작성 그것이 언제
다시 셔플 요소를 셔플

이 방법을 사용하면 90 %의 "위태함"을 얻지 못할 것입니다.

+0

이것은 훌륭한 대답 인 것처럼 보인다. 나는 이것을 오늘 밤 Anoop 's에서 개인적으로 잘 작동 하는지를보기 위해 시도 할 것이다. –

+0

어젯밤에 이것이 내 필요에 가장 적합한 솔루션이라는 것을 알게되었습니다. 구현 및 관리가 쉽습니다. 고맙습니다. –

4

NSMutableDictionary에 사전 복사본을 만듭니다.

arc4random을 선택하여 재생하십시오.

사전에서 제거하십시오.

NSInteger randomNumber=arc4random(); 
NSMutableDictionary *playingVideo=[NSMutableDictionary dictionaryWithDictionary:videoDictionary]; 
//select a video from playingVideo 
NSString *key= [NSString stringWithFormat:@"%d", randomNumber]; 
// .... 
//remove from there 
[playingVideo removeObjectForKey:key]; 

EDIT 1이되므로

는 난수를 생성하고 상기 사전에서 검색된다. 이미 존재하지 않거나 이미 대체되어있을 수 없으며 심지어 1000 초의 반복으로도 특정 번호가 생성되지 않습니다.

NSMutableDictionary *playingVideo=[NSMutableDictionary dictionaryWithDictionary:videoDictionary]; 
while(playingVideo.count){ 
    NSMutableArray *keys=[playingVideo allKeys]; 
    NSInteger randomNumber=arc4random()%keys.count; 
    NSString *key=[NSString stringWithFormat:@"%d", keys[key]]; 
    NSString *videoToPlay=playingVideo[key]; 
    //play it 
    [playingVideo removeObjectForKey:key]; 
} 
+0

Anoop, 고마워요.하지만 이것으로 조금 혼란 스럽네요. 임의의 숫자가 이전에 재생 된 번호를 다시 생성하고 사전에 아무 것도 찾지 못하면 자신의 솔루션과 동일한 상황에 있지 않겠습니까? –

+0

@AlanTaylor :'playingVideo [key]'가 nil인지 확인하고, yes이면 다음 randomNumber 생성을 계속합니다. 또는 Undeph 답장을받을 수 있습니다. –

+0

고마워, 내가 집에 돌아와서 내가하고 싶은 일을 할 수 있는지 알아봐 주겠다. –

1

임의 번호를 사용하는 경우 낮은 수준에서 높은 수준까지 임의의 숫자를 사용해야합니다.

(arc4random() % 10) + 1; // it will produce random number from 1 to 10 
+0

이것은 좋은 방법입니다. –

+0

고마워요! 나는 실제로 일하고 싶다. 왜냐하면 나는 일하고있어 선을 마쳤다는 것을 알지 못했기 때문에 나는 나의 질문을 타이핑하는 동안 산만 해졌다. –

관련 문제