这可能是一个愚蠢的问题。 我知道样本返回数组中随机数的元素。 例如, [1,2,3] .sample.times
有没有办法按特定顺序返回固定数量的元素? 我不知道如何在红宝石中做到这一点。
编辑: 让我们说我总是希望只返回第二个和最后一个数组中的penalty_name,severity和name。:
offenses = PERSON_SUMMARY[:offenses].map do |offense|
offense[:penalties].map do |penalty|
penalty.merge(name: offense[:offense_name])
end
end.flatten
=> [{:penalty_name=>"Prison", :severity=>"Medium", :name=>"Speeding"}, {:penalty_name=>"Ticket", :severity=>"Low", :name=>"Speeding"}, {:penalty_name=>"Prison", :severity=>"Medium", :name=>"Shoplifting"}, {:penalty_name=>"Fine", :severity=>"Low", :name=>"Shoplifting"}]
现在我正在做:
offenses.each do |hash|
hash.sample
答案 0 :(得分:1)
我想你想要这样的东西:
[1,2,3,4,5].sample(4).sort
从阵列中取出4个随机数并订购......
修改 - 发表评论后:
[5,4,3,2,1].values_at(1,-1).sort #second element(1) and last one(-1)
=>[1, 4]
答案 1 :(得分:0)
您可以使用values_at
指定所需的内容(负数从后面开始计算。)
ar=[{:penalty_name=>"Prison", :severity=>"Medium", :name=>"Speeding"}, {:penalty_name=>"Ticket", :severity=>"Low", :name=>"Speeding"}, {:penalty_name=>"Prison", :severity=>"Medium", :name=>"Shoplifting"}, {:penalty_name=>"Fine", :severity=>"Low", :name=>"Shoplifting"}]
p ar.values_at(1,-1).map{|h|h.values}
#=> [["Ticket", "Low", "Speeding"], ["Fine", "Low", "Shoplifting"]]