赞 | 8 |
VIP | 0 |
好人卡 | 0 |
积分 | 49 |
经验 | 0 |
最后登录 | 2024-3-22 |
在线时间 | 445 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 4914
- 在线时间
- 445 小时
- 注册时间
- 2011-3-26
- 帖子
- 101
|
本帖最后由 rfvtgbzxc 于 2021-12-31 21:56 编辑
一行写出来难免用到tricks,最简朴的的应该就是洗牌算法了吧。
- def shuffle!(arr)
- for i in 0...arr.size
- j = rand(arr.size - i) + i
- arr[i],arr[j] = arr[j],arr[i]
- end
- end
- arr1 = [1,2,3,4,5]
- shuffle!(arr1)
- puts arr1
复制代码
这个算法的随机性需要证明,但是我不会2333
https://www.jianshu.com/p/7a5946cfce87
想偷懒可以把其作为Array类的内置函数(不要在大项目里面随便改这些类,容易冲突,RM这种小工程随意,留个记号就行):
- class Array
- def shuffle!
- for i in 0...self.size
- j = rand(self.size - i) + i
- self[i],self[j] = self[j],self[i]
- end
- end
- end
- arr1 = [1,2,3,4,5]
- arr1.shuffle!
- puts arr1
复制代码
仔细想想貌似跟你的算法也没有太大区别2333就是节省了一点存储空间 |
评分
-
查看全部评分
|