亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是最好的方式來洗牌一個NSMutableArray?

什么是最好的方式來洗牌一個NSMutableArray?

iOS
心有法竹 2019-06-04 16:43:43
什么是最好的方式來洗牌一個NSMutableArray?如果你有NSMutableArray如何隨機調整元素?(我有我自己的答案,這是在下面,但我是新的可可,我有興趣知道是否有更好的方法。)更新:截至iOS 10+和MacOS 10.12+,有一個-[NSMutableArray shuffledArray]方法,可用于洗牌??匆奾ttps:/developer.apple.com/Document/Foundation/nsArray/1640855-Shuffledarray?language=objc關于細節。(但請注意,這將創建一個新的數組,而不是對現有的元素進行洗牌。)
查看完整描述

3 回答

?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

我通過向NSMutableArray添加一個類別來解決這個問題。

編輯:刪除不必要的方法,感謝Ladd的回答。

編輯:變化(arc4random() % nElements)arc4random_uniform(nElements)感謝Gregory Goltsov的答復,Miho和Blahdiblah的評論

編輯:循環改進,感謝羅恩的評論

編輯:添加檢查該數組不為空,這要感謝Mahesh Agrawal的評論。

//  NSMutableArray_Shuffling.h#if TARGET_OS_IPHONE#import <UIKit/UIKit.h>#else#include <Cocoa/Cocoa.h>#endif
// This category enhances NSMutableArray by providing
// methods to randomly shuffle the elements.@interface NSMutableArray (Shuffling)- (void)shuffle;@end
//  NSMutableArray_Shuffling.m#import "NSMutableArray_Shuffling.h"@implementation NSMutableArray (Shuffling)- (void)shuffle{
    NSUInteger count = [self count];
    if (count <= 1) return;
    for (NSUInteger i = 0; i < count - 1; ++i) {
        NSInteger remainingCount = count - i;
        NSInteger exchangeIndex = i + arc4random_uniform((u_int32_t )remainingCount);
        [self exchangeObjectAtIndex:i withObjectAtIndex:exchangeIndex];
    }}@end


查看完整回答
反對 回復 2019-06-04
  • 3 回答
  • 0 關注
  • 535 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號