我想得到一个从0到大数(2 ^ 31)的随机元素 .
我尝试从这样的 Range
创建一个 Array
(所以我可以使用Swift的 Array.randomElement
),就像here一样:
let myArray: [Int64] = [Int64](0...4294967292)
哪个编译,但崩溃:
MyPoject(1569,0x100cc2f40)malloc:无法分配区域mach_vm_map(size = 34359738368)失败(错误代码= 3)MyProject(1569,0x100cc2f40)malloc:在malloc_error_break中设置断点以进行调试
当然,我可以写一个custom function来创建数组,但这有点气味,特别是因为数组每次都是完全相同的 .
Swift能提供更好的解决方案吗?
2 回答
错误消息
告诉你运行时无法分配32GB的内存 - 这就是4294967292 64位整数的数组所需要的
但是没有必要为此目的创建一个数组 . 从Swift 4.2开始,您可以直接致电
使用其中之一
FixedWidthInteger协议的方法 .
最后请注意
4294967292
不是2^31 = 2147483648
- 如果打算在0
(包括)到2^31
(不包括)的范围内创建一个随机数,那么会诀窍 .
ClosedRange
在Swift 4.2中也有一个randomElement
方法:请注意,您说您想要一个0到2 ^ 31之间的随机数,但在您的示例中使用了
1...4294967292
而不是0...4294967292
.