0

这可能是一个愚蠢的问题。我知道 sample 从数组中返回随机数量的元素。例如, [1,2,3].sample.times 做

有没有办法始终以特定顺序返回固定数量的元素?我不知道如何在红宝石中做到这一点。

编辑:假设我总是想从这里的第二个和最后一个数组中返回惩罚名称、严重性和名称。:

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
4

2 回答 2

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] 
于 2013-03-14T19:22:14.647 回答
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"]]
于 2013-03-14T19:26:49.497 回答