注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

你我崩坏的世界

~永远鲜红的幼月~

 
 
 

日志

 
 

[ruby]hash类中的shift方法  

2009-07-12 23:36:03|  分类: 素材与资源 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
今天逛6R看到有个人问"如何让15个变量随机代入1-15这15个不同的数字"
http://bbs.66rpg.com/viewthread.php?tid=128419

一开始偶的想法是直接用一个数组保存1..15,然后从1..数组大小中随机取出一个数存在目的数组中.然后从源数组中删掉这个数.(比如有标号1~15的牌,不放回取出).
后来突然想到可以用hash表来直接实现.一开是偶尝试用hash名[n]的方式取数结果取出来的都是nil,再试着直接把hash转化为数组却发现被自动排序了,
在网上查了下发现ruby中hash转换是会自动排序的.但是我发现了一个很好很强大的函数shift.

重点啦~
shift的作用是从hash中随机删除一个元组.
比如一开始的问题,我写的是:
a = {0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15}
for i in 1..15
b[i]=a.shift[1]

其中hash用的是简化定义,{0,1,1,2}<=>{"0"->1,"1"->2}
shift的返回值是一个数组,数组的第一位表示删除hash的key,第二位表示删除hash的value.
这里是从1~15中取出不重复的数字给数组b,所以只用了hash的value.

  评论这张
 
阅读(782)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017