Dan*_*ger 3 largenumber int64 random-seed swift
我想得到一个从0到大数(2 ^ 31)的随机元素.
我试图创建一个Array由这样的Range(这样我就可以使用SWIFT的 Array.randomElement),如做在这里:
let myArray: [Int64] = [Int64](0...4294967292)
哪个编译,但崩溃:
MyPoject(1569,0x100cc2f40)malloc:无法分配区域mach_vm_map(size = 34359738368)失败(错误代码= 3)MyProject(1569,0x100cc2f40)malloc:在malloc_error_break中设置断点以进行调试
当然,我可以编写一个自定义函数来创建数组,但这有点气味,特别是因为数组每次都是完全相同的.
Swift能提供更好的解决方案吗?
错误消息
malloc:无法分配区域mach_vm_map(size = 34359738368)
告诉我运行时无法分配32GB内存 - 这就是4294967292 64位整数的数组所需要的
let myArray: [Int64] = [Int64](0...4294967292)
Run Code Online (Sandbox Code Playgroud)
但是没有必要为此目的创建一个数组.从Swift 4.2开始,您可以直接致电
let rnd = Int64.random(in: 0...4294967292)
// or
let rnd = Int64.random(in: 0..<4294967293)
Run Code Online (Sandbox Code Playgroud)
使用其中之一
static func random(in range: ClosedRange<Self>) -> Self
static func random(in range: Range<Self>) -> Self
Run Code Online (Sandbox Code Playgroud)
FixedWidthInteger协议的方法.
最后请注意,4294967292不是2^31 = 2147483648- 如果打算在0(包括)到2^31(不包括)的范围内创建一个随机数
let rnd = Int32.random(in: 0...Int32.max)
Run Code Online (Sandbox Code Playgroud)
会诀窍.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |