arrays - 根据今天的日期,以一致的顺序随机排列数组 - Swift

标签 arrays swift sorting date shuffle

我想随机播放一组 Any 对象,但在当前日历日执行随机播放时,顺序应该保持一致。

let myArray = [1, 2, 3, 4, 5]
print(myArray.myShuffleForDateFunction(Date()))

//output today is always e.g. [3, 5, 1, 2, 4] 
//output tomorrow is always e.g. [1, 4, 5, 3, 2], etc

所以想要一些我用今天的日期作为种子的随机顺序生成器,例如

let todayAtMidnight = Calendar.current.startOfDay(for: Date())
let secondsSince1970UntilTodayAtMidnight = todayAtMidnight.timeIntervalSince1970

我查看了 shuffle(using:),但我可以向它传递一个以我的日期为种子的生成器吗,或者我可以使用其他东西吗?

最佳答案

是这样的吗?

我查找了如何播种随机数生成器并找到了这个主题: Generating random numbers in swift

使用您的技术将今天的午夜日期作为数字...您可以为数字生成器播种并在每个午夜日期获得相同的随机序列。

import GameplayKit

let myArray = [1, 2, 3, 4, 5]

let calendar = Calendar.current
let todayAtMidnight = calendar.startOfDay(for: Date())
let seed = UInt64(todayAtMidnight.timeIntervalSince1970)

var mersenneTwister = GKMersenneTwisterRandomSource(seed: seed)
let fixedArrayByDate = mersenneTwister.arrayByShufflingObjects(in: myArray)
print(fixedArrayByDate)

打印出今天的日期:

[2, 3, 4, 1, 5]

正如 Daniel 所建议的,人们可以设置一个扩展来娱乐一下:

import GameplayKit

extension Array {
    func shuffledByDate(_ date: Date) -> [Any] {
        let calendar = Calendar.current
        let todayAtMidnight = calendar.startOfDay(for: date)
        let seed = UInt64(todayAtMidnight.timeIntervalSince1970)
        
        let mersenneTwister = GKMersenneTwisterRandomSource(seed: seed)
        return mersenneTwister.arrayByShufflingObjects(in: self)
    }
}

let myArray = [1, 2, 3, 4, 5].shuffledByDate(Date())
print(myArray)

关于arrays - 根据今天的日期,以一致的顺序随机排列数组 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62616790/

相关文章:

javascript - 从数组中删除空字符串或空白字符串 - Javascript

algorithm - 对图表进行排序以使尽可能多的箭头指向前方

php - 如何在输出前重组帖子

ios - 使用 Swift 将更多数据传递到 UISearchController

java - 如何在 Spark 中在 JSONArray 上应用 flatmap 并转换为 JSONObject?

json - 如何在json对象中传递对象列表

swift - 如何在 swift 中执行 block 样式函数

ios - 在另一个 Controller 中显示/隐藏 UIButton

iOS - 安排多个本地通知,UNCalendarNotificationTrigger

php - 从mysql数据库中选择最近地理位置的最快方法是什么?