在 Swift 中创建一个随机数数组
Create an array of random numbers in Swift
我刚开始学习Swift。
我正在尝试创建一个包含多个随机数的数组,并最终对数组进行排序。我能够创建一个随机数数组,但迭代它以创建多个随机数数组的最佳方法是什么?
func makeList() {
var randomNums = arc4random_uniform(20) + 1
let numList = Array(arrayLiteral: randomNums)
}
makeList()
在Swift 4.2中有一个新的固定宽度整数的静态方法,使语法更加用户友好:
func makeList(_ n: Int) -> [Int] {
return (0..<n).map { _ in .random(in: 1...20) }
}
Edit/update: Swift 5.1 或更高版本
我们还可以扩展 Range
和 ClosedRange
并创建一个方法来 return n
随机元素:
extension RangeExpression where Bound: FixedWidthInteger {
func randomElements(_ n: Int) -> [Bound] {
precondition(n > 0)
switch self {
case let range as Range<Bound>: return (0..<n).map { _ in .random(in: range) }
case let range as ClosedRange<Bound>: return (0..<n).map { _ in .random(in: range) }
default: return []
}
}
}
extension Range where Bound: FixedWidthInteger {
var randomElement: Bound { .random(in: self) }
}
extension ClosedRange where Bound: FixedWidthInteger {
var randomElement: Bound { .random(in: self) }
}
用法:
let randomElements = (1...20).randomElements(5) // [17, 16, 2, 15, 12]
randomElements.sorted() // [2, 12, 15, 16, 17]
let randomElement = (1...20).randomElement // 4 (note that the computed property returns a non-optional instead of the default method which returns an optional)
let randomElements = (0..<2).randomElements(5) // [1, 0, 1, 1, 1]
let randomElement = (0..<2).randomElement // 0
注意:对于 Swift 3、4 和 4.1 及更早版本,请单击 here。
好的,这是 的 copy/paste,但我想我会尽量记住那一行:
var randomArray = map(1...100){_ in arc4random()}
(我喜欢!)
如果你需要一个带upperBound(不包括)的随机数,使用arc4random_uniform(upperBound)。
例如:0到99之间的随机数:arc4random_uniform(100)
Swift 2 次更新
var randomArray = (1...100).map{_ in arc4random()}
Swift 4.2 或更高版本
func makeList(_ n: Int) -> [Int] {
return (0..<n).map{ _ in Int.random(in: 1 ... 20) }
}
let list = makeList(5) //[11, 17, 20, 8, 3]
list.sorted() // [3, 8, 11, 17, 20]
这个怎么样? 适用于 Swift 5 和 Swift 4.2:
public extension Array where Element == Int {
static func generateRandom(size: Int) -> [Int] {
guard size > 0 else {
return [Int]()
}
return Array(0..<size).shuffled()
}
}
用法:
let array = Array.generateRandom(size: 10)
print(array)
打印例如:
[7, 6, 8, 4, 0, 3, 9, 2, 1, 5]
上述方法为您提供了唯一编号。但是,如果您需要冗余值,请使用以下实现:
public extension Array where Element == Int {
static func generateRandom(size: Int) -> [Int] {
guard size > 0 else {
return [Int]()
}
var result = Array(repeating: 0, count: size)
for index in 0..<result.count {
result[index] = Int.random(in: 0..<size)
}
return result
}
}
上面使用 map() 的较短版本:
public extension Array where Element == Int {
static func generateRandom(size: Int) -> [Int] {
guard size > 0 else {
return [Int]()
}
var result = Array(repeating: 0, count: size)
return result.map{_ in Int.random(in: 0..<size)}
}
}
Swift 5
这将创建一个大小为 5 的数组,其元素范围为 1 到 10(含)。
let arr = (1...5).map( {_ in Int.random(in: 1...10)} )
我刚开始学习Swift。
我正在尝试创建一个包含多个随机数的数组,并最终对数组进行排序。我能够创建一个随机数数组,但迭代它以创建多个随机数数组的最佳方法是什么?
func makeList() {
var randomNums = arc4random_uniform(20) + 1
let numList = Array(arrayLiteral: randomNums)
}
makeList()
在Swift 4.2中有一个新的固定宽度整数的静态方法,使语法更加用户友好:
func makeList(_ n: Int) -> [Int] {
return (0..<n).map { _ in .random(in: 1...20) }
}
Edit/update: Swift 5.1 或更高版本
我们还可以扩展 Range
和 ClosedRange
并创建一个方法来 return n
随机元素:
extension RangeExpression where Bound: FixedWidthInteger {
func randomElements(_ n: Int) -> [Bound] {
precondition(n > 0)
switch self {
case let range as Range<Bound>: return (0..<n).map { _ in .random(in: range) }
case let range as ClosedRange<Bound>: return (0..<n).map { _ in .random(in: range) }
default: return []
}
}
}
extension Range where Bound: FixedWidthInteger {
var randomElement: Bound { .random(in: self) }
}
extension ClosedRange where Bound: FixedWidthInteger {
var randomElement: Bound { .random(in: self) }
}
用法:
let randomElements = (1...20).randomElements(5) // [17, 16, 2, 15, 12]
randomElements.sorted() // [2, 12, 15, 16, 17]
let randomElement = (1...20).randomElement // 4 (note that the computed property returns a non-optional instead of the default method which returns an optional)
let randomElements = (0..<2).randomElements(5) // [1, 0, 1, 1, 1]
let randomElement = (0..<2).randomElement // 0
注意:对于 Swift 3、4 和 4.1 及更早版本,请单击 here。
好的,这是
var randomArray = map(1...100){_ in arc4random()}
(我喜欢!)
如果你需要一个带upperBound(不包括)的随机数,使用arc4random_uniform(upperBound)。
例如:0到99之间的随机数:arc4random_uniform(100)
Swift 2 次更新
var randomArray = (1...100).map{_ in arc4random()}
Swift 4.2 或更高版本
func makeList(_ n: Int) -> [Int] {
return (0..<n).map{ _ in Int.random(in: 1 ... 20) }
}
let list = makeList(5) //[11, 17, 20, 8, 3]
list.sorted() // [3, 8, 11, 17, 20]
这个怎么样? 适用于 Swift 5 和 Swift 4.2:
public extension Array where Element == Int {
static func generateRandom(size: Int) -> [Int] {
guard size > 0 else {
return [Int]()
}
return Array(0..<size).shuffled()
}
}
用法:
let array = Array.generateRandom(size: 10)
print(array)
打印例如:
[7, 6, 8, 4, 0, 3, 9, 2, 1, 5]
上述方法为您提供了唯一编号。但是,如果您需要冗余值,请使用以下实现:
public extension Array where Element == Int {
static func generateRandom(size: Int) -> [Int] {
guard size > 0 else {
return [Int]()
}
var result = Array(repeating: 0, count: size)
for index in 0..<result.count {
result[index] = Int.random(in: 0..<size)
}
return result
}
}
上面使用 map() 的较短版本:
public extension Array where Element == Int {
static func generateRandom(size: Int) -> [Int] {
guard size > 0 else {
return [Int]()
}
var result = Array(repeating: 0, count: size)
return result.map{_ in Int.random(in: 0..<size)}
}
}
Swift 5
这将创建一个大小为 5 的数组,其元素范围为 1 到 10(含)。
let arr = (1...5).map( {_ in Int.random(in: 1...10)} )