Tom*_*Tom 0 ruby ruby-on-rails
我想每次从一个集合中随机抽样一个对象,同时确保每个人都被挑选,当每个对象被挑选一次然后只使用样本.
所以,如果我们有数组:
["string1", "string2", "string3"]
Run Code Online (Sandbox Code Playgroud)
然后在第三次调用中对所有拾取的对象进行采样.例如:
arr.sample
=> "string2"
arr.sample
=> "string1"
arr.sample
=> "string3"
Run Code Online (Sandbox Code Playgroud)
我怎么能用ruby/Rails做到这一点?
编辑:
当尝试方法"shuffle"和"pop"我得到错误:
undefined method `pop' for #<File::ActiveRecord_Associations_CollectionProxy:0x007fa3ea5c4820>
Run Code Online (Sandbox Code Playgroud)
一种解决方案是使用 .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
Run Code Online (Sandbox Code Playgroud)
更新:由于您的原始对象不是数组而是集合,您可能需要通过使用to_a或执行此操作将其强制转换为数组
# assume that files is your collection
m = (0..files.count-1).to_a
files[m.shuffle!.pop]
Run Code Online (Sandbox Code Playgroud)
files[m.shuffle!.pop] 每次都会返回一个不同的对象.
| 归档时间: |
|
| 查看次数: |
859 次 |
| 最近记录: |