洗牌 NSMutableArray Objective-C

发布于 2024-12-03 03:30:58 字数 407 浏览 0 评论 0原文

可能的重复:
洗牌 NSMutableArray 的最佳方法是什么?
不重复的随机数

如何获取 NSMutableArray 的随机索引而不重复? 我有 NSMutableArray *audioList。我想以随机播放模式播放每首曲目,而不重复播放。如何以最好的方式做到这一点?

Possible Duplicate:
What's the Best Way to Shuffle an NSMutableArray?
Non repeating random numbers

How to get random indexes of NSMutableArray without repeating?
I have NSMutableArray *audioList. I want to play each track in shuffle mode, without repeating. How to do this in the best way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

起风了 2024-12-10 03:30:58

请参阅下面的代码:

int length = 10; // int length = [yourArray count];
NSMutableArray *indexes = [[NSMutableArray alloc] initWithCapacity:length];
for (int i=0; i<10; i++) [indexes addObject:[NSNumber numberWithInt:i]];
NSMutableArray *shuffle = [[NSMutableArray alloc] initWithCapacity:length];
while ([indexes count])
{
    int index = rand()%[indexes count];
    [shuffle addObject:[indexes objectAtIndex:index]];
    [indexes removeObjectAtIndex:index];
}
[indexes release];
for (int i=0; i<[shuffle count]; i++)
    NSLog(@"%@", [shuffle objectAtIndex:i]);

现在,在随机播放中,您将拥有数组的索引,而不会重复。

希望这会对您有所帮助

See the code below:

int length = 10; // int length = [yourArray count];
NSMutableArray *indexes = [[NSMutableArray alloc] initWithCapacity:length];
for (int i=0; i<10; i++) [indexes addObject:[NSNumber numberWithInt:i]];
NSMutableArray *shuffle = [[NSMutableArray alloc] initWithCapacity:length];
while ([indexes count])
{
    int index = rand()%[indexes count];
    [shuffle addObject:[indexes objectAtIndex:index]];
    [indexes removeObjectAtIndex:index];
}
[indexes release];
for (int i=0; i<[shuffle count]; i++)
    NSLog(@"%@", [shuffle objectAtIndex:i]);

Now in shuffle you will have indexes of your array without repeating.

Hope, this will help you

七度光 2024-12-10 03:30:58

Nekto 的答案很好,但我会改变两件事:

1)不使用 rand(),而是使用 arc4random() 来获得不太可预测的结果(更多详细信息此处):

int index = arc4random() % [indexes count];

2) 输出内容“shuffle”,使用 [myArray 描述](无需使用 for 循环):

NSLog(@"shuffle array: %@", [shuffle description]);

Nekto's answer is great, but I would change two things:

1) Instead of using rand(), use arc4random() for less predictable results (more details here):

int index = arc4random() % [indexes count];

2) To output contents of "shuffle", use [myArray description] (no need to use a for loop):

NSLog(@"shuffle array: %@", [shuffle description]);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文