Project1

标题: 请问如何随机抽取数组中的3个数据 [打印本页]

作者: jianyulei    时间: 2019-1-10 16:18
标题: 请问如何随机抽取数组中的3个数据
本帖最后由 jianyulei 于 2019-1-10 20:00 编辑

一个包含有各种相同数据、不同数据、空值的数组中,如何随机抽取3个不同位置编号的数据?如果抽到了空值则舍去空值(但仍算作一次抽取),被抽取的数组要去除对应的元素。
就像是从卡包里抽取卡片一样
作者: KB.Driver    时间: 2019-1-10 16:40
本帖最后由 KB.Driver 于 2019-1-10 16:45 编辑

自己写脚本的话要善用F1文档


数组为a的话,
RUBY 代码复制
  1. a = a - [nil]
就行


另一方法


RUBY 代码复制
  1. a.delete(nil)

作者: KB.Driver    时间: 2019-1-10 16:56
本帖最后由 KB.Driver 于 2019-1-10 17:04 编辑

你这编辑还把标题和问题描述都改了= =
这样显得我答非所问啊

抽取其实也简单。

RUBY 代码复制
  1. class Array
  2. def 抽取(number) #number是抽取的数量
  3.   raise "数组长度小于要抽取的数量!" if self.size < number
  4.   result = []
  5.   while result.size < number
  6.     index = rand(self.size)
  7.     result << index unless result.include?(index) #防止抽到重复的
  8.   end
  9.   result.collect{|index| self[index]}
  10. end
  11. end
  12. #使用方法: array.抽取(3)


作者: jianyulei    时间: 2019-1-10 19:44
本帖最后由 jianyulei 于 2019-1-10 19:51 编辑
KB.Driver 发表于 2019-1-10 16:56
你这编辑还把标题和问题描述都改了= =
这样显得我答非所问啊


我尝试了下,你和我的方法似乎都不太行,不能真正做到“抽取”的效果,抽取之后原本的数组中被抽取的元素应该消失才对。
例如有2个数组 A和B,B= [1,6,nil,7,3,1,nil]
随机抽3个,抽到了b[5]的1,b[2]的nil,b[3]的7,
这三个元素就放到A数组里变成a[nil ,7 ,1] 而a数组还剩下[1,6,3,nil]
作者: KB.Driver    时间: 2019-1-10 21:51
本帖最后由 KB.Driver 于 2019-1-10 21:55 编辑
jianyulei 发表于 2019-1-10 19:44
我尝试了下,你和我的方法似乎都不太行,不能真正做到“抽取”的效果,抽取之后原本的数组中被抽取的元素 ...


原来你要的是抽完就没掉……
结合菜刀王的话可以写成函数:
RUBY 代码复制
  1. class Array
  2.   def 抽取(number)
  3.     raise "抽取数量大于数组长度!" if number > self.size
  4.     result = []
  5.     number.times{ result << self.delete_at(rand(self.size)) }
  6.     return result
  7.   end
  8. end



作者: 张咚咚    时间: 2019-1-10 22:12
本帖最后由 张咚咚 于 2019-1-10 22:15 编辑
  1. data = ('A'..'Z').to_a
  2. data -= r = data.shuffle[0,3]
  3. p r, data
复制代码





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1