簡體   English   中英

Swift中的負隨機數

[英]Negative random number in Swift

我正在開發一個快速的iPhone應用程序,並且有一個要求我總是要生成負的隨機數。

我知道生成隨機數的方法,但似乎並沒有想出一種產生負數的方法。

請嘗試使用這個

let lowerValue = -100
let upperValue = 0
let result = Int(arc4random_uniform(UInt32(upperValue - lowerValue + 1))) +   lowerValue

print(result)

Output

-81

這是你的功能,我相信:

extension Int {

/// Generates a random `Int` within `0...100`
public static func random() -> Int {
    return random(0...100)
}

/// Generates a random `Int` inside of the closed interval.
public static func random(interval: ClosedInterval<Int>) -> Int {
    return interval.start + Int(arc4random_uniform(UInt32(interval.end - interval.start + 1)))
}

}

用法示例:

Int.random(-10...0)

它來自RandomKit庫 - 它看起來非常有用於各種目的。

var randomNumber = -1 * Int(arc4random_uniform(UInt32(5)))

5將確保隨機數生成為零到五。


#1。 Intrandom(in:)方法

使用Swift 5, Int有一個名為random(in:)的類型方法。 random(in:)具有以下聲明:

static func random(in range: Range<Int>) -> Int

返回指定范圍內的隨機值。

以下Playground示例代碼顯示了如何使用帶有一系列負整數的random(in:)以從中獲取負的隨機數:

let range = -70 ..< -50
let randomNumber = Int.random(in: range)
print(randomNumber) // prints: -57
let closedRange = Int.min ..< 0
let randomNumber = Int.random(in: closedRange)
print(randomNumber) // prints: -7618449904516816385

Int還有一個名為random(in:)的類型方法random(in:)它接受ClosedRange<Int>類型的參數:

let closedRange = -70 ... -50
let randomNumber = Int.random(in: closedRange)
print(randomNumber) // prints: -66

#2。 Intrandom(in:using:)方法

如果需要,您可以使用random(in:using:)使用自定義生成器作為隨機源返回指定范圍內的隨機值。 random(in:using:)具有以下聲明:

static func random<T>(in range: Range<Int>, using generator: inout T) -> Int where T : RandomNumberGenerator

返回指定范圍內的隨機值,使用給定生成器作為隨機源。

用法:

let range = -70 ..< -50
var randomNumberGenerator = SystemRandomNumberGenerator() // replace with custom generator
let randomNumber = Int.random(in: range, using: &randomNumberGenerator)
print(randomNumber) // prints: -52

請注意, random(in:using:)具有等效的random(in:using:) ,它接受一個閉合范圍作為其參數:

let range = -70 ... -50
var randomNumberGenerator = SystemRandomNumberGenerator() // replace with custom generator
let randomNumber = Int.random(in: range, using: &randomNumberGenerator)
print(randomNumber) // prints: -58

#3。 RangerandomElement()randomElement(using:)方法

RangeClosedRange通過符合Collection協議獲取randomElement()randomElement(using:)方法。 randomElement()具有以下聲明:

func randomElement() -> Bound?

返回集合的隨機元素。

您可以調用randomElement()從范圍或閉合范圍中選擇隨機元素。 此示例從一系列負數中隨機選取一個數字:

let range = -70 ..< -50
let randomNumber = range.randomElement()
print(randomNumber) // prints: Optional(-64)

使用Swift 4.2 ,使用新的隨機方法(如Int.random 您可以在此處閱讀有關更改的更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM