0

これはばかげた質問かもしれません。サンプルは配列からランダムな数の要素を返すことを知っています。たとえば、[1,2,3] .sample.times do

常に一定数の要素を特定の順序で返す方法はありますか?ルビーでこれを行う方法がわかりません。

編集:私は常にペナルティ名、重大度、名前をここで常に2番目で最後の配列からのみ返したいとしましょう。:

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 に答える