查看: 2189|回复: 4

[已经过期] 如何用Ruby进行随机组合?

[复制链接]
梦石
0
星屑
1944
在线时间
404 小时
注册时间
2015-8-30
回帖
322
发表于 2017-8-11 13:50:06 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
比如说有一个数组ary(ary.size大于0),我现在要得到从ary中取出n个元素(n小于等于ary.size)的所有可能的组合其中随机的一个组合,作为另一个数组输出。
小仙女一枚~
梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2017-8-11 14:30:22 | 显示全部楼层
  1. ary.sort{|a, b| rand(1) * 2 - 1}[0..n]
复制代码
]
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
1
星屑
23241
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2017-8-11 14:51:28 | 显示全部楼层
  1. ary.shuffle[0..6]
复制代码
回复

使用道具 举报

梦石
0
星屑
2306
在线时间
1010 小时
注册时间
2012-4-30
回帖
1455

开拓者

发表于 2017-8-14 22:27:44 | 显示全部楼层
居然在随手一搜这个标题就能在segmentfault发现一模一样的问题hhh
segmentfault
回复

使用道具 举报

梦石
0
星屑
285
在线时间
125 小时
注册时间
2009-12-16
回帖
141
发表于 2017-8-14 23:34:10 | 显示全部楼层
本帖最后由 0nepeop1e 于 2017-8-14 23:35 编辑
  1. class Array
  2.   def sample(i = 1, repeat = false)
  3.     return nil if self.empty?
  4.     n = [[0,i].max,a.size].min
  5.     return self[rand(self.size)] if n == 1
  6.     if repeat
  7.       return n.times.map do
  8.         self[self.size]
  9.       end
  10.     else
  11.       a = a.size.times.to_a
  12.       res = n.min.times.map do
  13.         self[a.delete(a[rand(a.size)])]
  14.       end
  15.       return res.size > 1 ? res : res[0]
  16.     end
  17.   end
  18. end
复制代码
⎝(゚∀。)⎠
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部