当前位置:  开发笔记 > 后端 > 正文

Ruby/Rails每次都从集合中采样唯一对象

如何解决《Ruby/Rails每次都从集合中采样唯一对象》经验,为你挑选了1个好方法。

我想每次从一个集合中随机抽样一个对象,同时确保每个人都被挑选,当每个对象被挑选一次然后只使用样本.

所以,如果我们有数组:

["string1", "string2", "string3"]

然后在第三次调用中对所有拾取的对象进行采样.例如:

arr.sample
=> "string2"
arr.sample
=> "string1"
arr.sample
=> "string3"

我怎么能用ruby/Rails做到这一点?

编辑:

当尝试方法"shuffle"和"pop"我得到错误:

undefined method `pop' for #

Van Huy.. 7

一种解决方案是使用 .shuffle!.pop

[15] pry(main)> arr = ["string1", "string2", "string3"]
=> ["string1", "string2", "string3"]
[16] pry(main)> arr.shuffle!.pop
=> "string2"
[17] pry(main)> arr.shuffle!.pop
=> "string1"
[18] pry(main)> arr.shuffle!.pop
=> "string3"
[19] pry(main)> arr.shuffle!.pop
=> nil

更新:由于您的原始对象不是数组而是集合,您可能需要通过使用to_a或执行此操作将其强制转换为数组

# assume that files is your collection
m = (0..files.count-1).to_a
files[m.shuffle!.pop] 

files[m.shuffle!.pop] 每次都会返回一个不同的对象.



1> Van Huy..:

一种解决方案是使用 .shuffle!.pop

[15] pry(main)> arr = ["string1", "string2", "string3"]
=> ["string1", "string2", "string3"]
[16] pry(main)> arr.shuffle!.pop
=> "string2"
[17] pry(main)> arr.shuffle!.pop
=> "string1"
[18] pry(main)> arr.shuffle!.pop
=> "string3"
[19] pry(main)> arr.shuffle!.pop
=> nil

更新:由于您的原始对象不是数组而是集合,您可能需要通过使用to_a或执行此操作将其强制转换为数组

# assume that files is your collection
m = (0..files.count-1).to_a
files[m.shuffle!.pop] 

files[m.shuffle!.pop] 每次都会返回一个不同的对象.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有