| 赞 | 281 |
| VIP | |
| 好人卡 | |
| 积分 | 86 |
| 经验 | |
| 最后登录 | 2025-8-5 |
| 在线时间 | 2650 小时 |
- 梦石
- 1
- 星屑
- 7574
- 在线时间
- 2650 小时
- 注册时间
- 2013-8-23
- 回帖
- 2152

|
楼主 |
发表于 2014-5-31 09:56:14
|
显示全部楼层
本帖最后由 鑫晴 于 2014-5-31 11:02 编辑
| class Array
def my_shuffle
(size-1).downto(0).each{|i|
u = rand(i)
t = self
self = self
self = t
}
self
end
end
"子丑寅卯辰巳午未申酉戌亥".split(//).my_shuffle
唔..自己解析一下
size返回数组的长度。若数组为空,返回 0。 downto(min) {|n| ... } 自 self 迭代至 min,依次迭减 1。若 self < min,则什么都不做。
each {|item| .... } 依次使用各个元素来对区块进行计算。返回 self。
self[nth]=val 将数组的第 nth 个元素之值改为 val。若 nth 超出数组范围,则数组会自动延伸。所延伸的部分初始化为 nil。返回 val。 split split方法的最基本用法分裂一个由单独字符或字符的静态序列组成的字符串。
如果split的第一个变量是一个字符串,那么这个字符串中字符就会被当作一个字符串分隔符使用。但是在逗号分隔的数据中,逗号用来分隔数据,这里的每个字符串成分都被用来分隔数据。
打开一个Array类
在里面追加一个my_shuffle方法
(数组总长-1)后迭代减去1,并依次记录给{i}这个数组
生成I范围内的某个数并赋值给U
将数组U内的第U个改成T
数组U与数组I同步
将数组I内的第I个赋值给T
以上循环
获取数组
将"子丑寅卯辰巳午未申酉戌亥"这句话单个字符分割并返回给my_shuffle | |
|
|