Randomize two arrays the same way Swift

后端 未结 4 2269
我寻月下人不归
我寻月下人不归 2021-01-21 04:36

I know there is a new shuffle method with iOS 9 but I am wondering if there is anyway to shuffle two arrays the same way?

For example

[1         


        
4条回答
  •  我在风中等你
    2021-01-21 05:00

    I'm unaware of any built-in shuffle mechanism in Swift 2.0. Assuming this doesn't exist, I borrowed some code from here.

    extension CollectionType where Index == Int {
        /// Return a copy of `self` with its elements shuffled
        func shuffle() -> [Generator.Element] {
            var list = Array(self)
            list.shuffleInPlace()
            return list
        }
    }
    
    extension MutableCollectionType where Index == Int {
        /// Shuffle the elements of `self` in-place.
        mutating func shuffleInPlace() {
            // empty and single-element collections don't shuffle
            if count < 2 { return }
    
            for i in 0..

    This solves the problem in a really straight forward way. It creates an array, shuffleOrder, that just has an index for each possible index in the starting arrays. It then shuffles these indices to create a random sampling order. Finally, it constructs two new arrays, based off of the starting arrays, sampling them with the shuffled values. While this doesn't mutate the original 2 arrays in place, it would be simple to modify this to do so.

提交回复
热议问题