设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2358|回复: 8
打印 上一主题 下一主题

[已经解决] 请教把一个数组重新随机排序的最简单写法

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4914
在线时间
445 小时
注册时间
2011-3-26
帖子
101
1
发表于 2021-12-31 21:52:40 | 显示全部楼层
本帖最后由 rfvtgbzxc 于 2021-12-31 21:56 编辑

一行写出来难免用到tricks,最简朴的的应该就是洗牌算法了吧。
  1. def shuffle!(arr)
  2.   for i in 0...arr.size
  3.     j = rand(arr.size - i) + i
  4.     arr[i],arr[j] = arr[j],arr[i]
  5.   end
  6. end

  7. arr1 = [1,2,3,4,5]
  8. shuffle!(arr1)
  9. puts arr1
复制代码

这个算法的随机性需要证明,但是我不会2333
https://www.jianshu.com/p/7a5946cfce87
想偷懒可以把其作为Array类的内置函数(不要在大项目里面随便改这些类,容易冲突,RM这种小工程随意,留个记号就行):
  1. class Array
  2.   def shuffle!
  3.     for i in 0...self.size
  4.       j = rand(self.size - i) + i
  5.       self[i],self[j] = self[j],self[i]
  6.     end
  7.   end
  8. end
  9. arr1 = [1,2,3,4,5]
  10. arr1.shuffle!
  11. puts arr1
复制代码

仔细想想貌似跟你的算法也没有太大区别2333就是节省了一点存储空间

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
taeckle + 1 多谢了!

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-17 03:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表