What's the Best Way to Shuffle an NSMutableArray?

后端 未结 12 1706
太阳男子
太阳男子 2020-11-21 11:53

If you have an NSMutableArray, how do you shuffle the elements randomly?

(I have my own answer for this, which is posted below, but I\'m new to Cocoa an

12条回答
  •  -上瘾入骨i
    2020-11-21 12:18

    This is the simplest and fastest way to shuffle NSArrays or NSMutableArrays (object puzzles is a NSMutableArray, it contains puzzle objects. I've added to puzzle object variable index which indicates initial position in array)

    int randomSort(id obj1, id obj2, void *context ) {
            // returns random number -1 0 1
        return (random()%3 - 1);    
    }
    
    - (void)shuffle {
            // call custom sort function
        [puzzles sortUsingFunction:randomSort context:nil];
    
        // show in log how is our array sorted
            int i = 0;
        for (Puzzle * puzzle in puzzles) {
            NSLog(@" #%d has index %d", i, puzzle.index);
            i++;
        }
    }
    

    log output:

     #0 has index #6
     #1 has index #3
     #2 has index #9
     #3 has index #15
     #4 has index #8
     #5 has index #0
     #6 has index #1
     #7 has index #4
     #8 has index #7
     #9 has index #12
     #10 has index #14
     #11 has index #16
     #12 has index #17
     #13 has index #10
     #14 has index #11
     #15 has index #13
     #16 has index #5
     #17 has index #2
    

    you may as well compare obj1 with obj2 and decide what you want to return possible values are:

    • NSOrderedAscending = -1
    • NSOrderedSame = 0
    • NSOrderedDescending = 1

提交回复
热议问题