• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

[Swift]随机数|Randomnumbers

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10305789.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

(1)、生成随机数

random(in:) :适用于所有数字类型生成随机数的方法 ,它返回给定范围内的随机数。并且适用于布尔类型。

 1 print(Int.random(in: -100...100))
 2 //Print -89
 3 
 4 print(Int32.random(in: -100...100))
 5 //Print 75
 6 
 7 print(Int64.random(in: -100...100))
 8 //Print 98
 9 
10 print(UInt32.random(in: 0...100))
11 //Print 4
12 
13 print(UInt64.random(in: .min ... .max))
14 //Print 3163649096186785965
15 
16 print(Double.random(in: 0..<1))
17 //Print 0.42567458317242557
18 
19 print(Float.random(in: 0..<1))
20 //Print 0.7992699
21 
22 print(Bool.random())
23 //Print true

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数。

这个api也很好的避免了modulo bias偏差的发生。

 1 func coinToss(count tossCount: Int) -> (heads: Int, tails: Int) {
 2     var tally = (heads: 0, tails: 0)
 3     for _ in 0..<tossCount {
 4         let isHeads = Bool.random()
 5         if isHeads {
 6             tally.heads += 1
 7         } else {
 8             tally.tails += 1
 9         }
10     }
11     return tally
12 }
13 
14 //测试
15 let (heads, tails) = coinToss(count: 1000)
16 print("1000 coin tosses — heads: \(heads), tails: \(tails)") 
17 //Print 1000 coin tosses — heads: 496, tails: 504

(2)、集合的随机元素:randomElement()

randomElement()方法的返回值为可选类型。

如果集合为空集合,则返回的值为nil

 1 let arr1:[Int] = []
 2 print(arr1.randomElement())
 3 //Print nil
 4 
 5 
 6 let arr2:[String] = ["s","t","r","e","n","g","t","h","e","n"]
 7 
 8 //Optional可选类型
 9 print(arr2.randomElement())
10 //Print Optional("g")
11 
12 //强制解包使用用感叹号!
13 print(arr2.randomElement()!)
14 //Print g

(3)、集合元素随机顺序:shuffle()

适用于MutableCollection和RandomAccessCollection的所有类型。

 1 let numbers = (1...10).shuffled()
 2 print(numbers)
 3 //Print [2, 7, 6, 5, 3, 10, 9, 1, 8, 4]
 4 
 5 let mutableNumbers = Array(10...20).shuffled()
 6 print(mutableNumbers)
 7 //Print [14, 13, 20, 16, 18, 17, 19, 12, 15, 11, 10]
 8 
 9 let arr:[String] = ["s","t","r","e","n","g","t","h","e","n"].shuffled()
10 print(arr)
11 //Print ["s", "r", "h", "e", "n", "t", "t", "g", "e", "n"]

(4)、自定义随机数生成器

标准库附带一个默认的随机数生成器Random.default,对于大多数简单的用例是一个不错的选择。

如果有特殊要求,可以采用RandomNumberGenerator协议实现自己的随机数生成器。

用于生成随机值的所有API都提供了一个允许用户传入其首选随机数生成器的重载:

 1 //一个模拟“random.default”的伪随机数生成器。
 2 struct MyRandomNumberGenerator: RandomNumberGenerator {
 3     var base = Random.default
 4     mutating func next() -> UInt64 {
 5         return base.next()
 6     }
 7 }
 8 
 9 var customRNG = MyRandomNumberGenerator()
10 Int.random(in: 0...100, using: &customRNG)
11 //Print 4

(5)、扩展您随机数Random类型

可以按照相同的模式,为您自己的类型提供随机数据API。

 1 enum Suit: String, CaseIterable {
 2     case diamonds = ""
 3     case clubs = ""
 4     case hearts = ""
 5     case spades = ""
 6 
 7     static func random<T: RandomNumberGenerator>(using generator: inout T) -> Suit {
 8         // Using CaseIterable for the implementation
 9         return allCases.randomElement(using: &generator)!
10 
11     }
12 
13     static func random() -> Suit {
14         return Suit.random(using: &Random.default)
15     }
16 }
17 
18 let randomSuit = Suit.random()
19 randomSuit.rawValue   
20 //Print ♣

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift-UIView,UItableView,Cell设置边框方法发布时间:2022-07-13
下一篇:
关于swift底部工具栏图标锯齿模糊问题。发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap