2013-03-14 79 views
0

這可能是一個愚蠢的問題。 我知道樣本返回數組中元素的隨機數。 例如, [1,2,3] .samplextimes doruby​​返回固定數量的元素在一定的順序

有沒有辦法按一定順序返回固定數量的元素? 我不知道如何在ruby中做到這一點。

編輯: 可以說,我總是想只從第二個和最後一個陣列總是在這裏:

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"}] 

權限返回penalty_name,嚴重性和名稱現在我做:

offenses.each do |hash| 
hash.sample 
+1

你怎麼知道哪些元素返回?你能更精確地定義問題嗎? – 2013-03-14 19:15:39

回答

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] 
+0

thanks.but我不想隨機元素。每次它應該返回我相同的元素,我需要 – newbie 2013-03-14 19:31:42

+0

示例將始終返回隨機元素 – gabrielhilal 2013-03-14 19:34:29

+0

如果你想指定的元素,你可以使用'values_at'和排序它...我編輯我的答案 – gabrielhilal 2013-03-14 19:36:45

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"]] 
(負數從後面數。)