2012-12-06 16 views
9

Tôi có một mảng của các nước:Làm thế nào để chọn một mục ngẫu nhiên từ một mảng trong ruby ​​(không đường ray)

@countries = ["Canada", "Denmark", "Germany", "Isle of Man", "Namibia", "Qatar", "South Africa", "United Kingdom","United States"] 

Và đang xây dựng một số dữ liệu ngẫu nhiên để thử nghiệm như thế này:

@test = [{ :name => "AAA -"+Faker::Name.name, :country => @countries.???? ....}] 

Làm cách nào để nhận giá trị ngẫu nhiên từ mã băm @countries?

@countries.rand(mlen) 

không hoạt động và trả về NoMethodError: private method rand 'được gọi là # `.

+1

Để tham khảo trong tương lai, bạn nên tham chiếu đến cấu trúc dữ liệu của các quốc gia dưới dạng 'mảng' không phải là một' băm'. –

+0

Bạn nên làm quen với tất cả các phương pháp trong [Array] (http://apidock.com/ruby/Array) và [Enumerable] (http://apidock.com/ruby/Enumerable). Nó sẽ giúp bạn tiết kiệm rất nhiều công sức và làm cho chương trình của bạn ngắn hơn! –

+0

Cảm ơn - Tôi bị lạc trong một thời gian. – Gary

Trả lời

26

sử dụng Array#sample:

@countries = ["Canada", "Denmark", "Germany", "Isle of Man", "Namibia", "Qatar", "South Africa", "United Kingdom","United States"] 

random_country = @countries.sample 
# => "Canada" 

random_country = @countries.sample 
# => "United Kingdom" 
+0

Hoạt động nhờ tuyệt vời. Tôi đã thử rand nhưng đây là một phương pháp riêng. Ruby có nhiều Gems ẩn. – Gary

+0

Đối với Ruby 1.8.7, đó là [Array # choice] (http://ruby-doc.org/core-1.8.7/Array.html#method-i-choice) – robd

3

Bạn cũng có thể sử dụng random_country = @countries.shuffle.first.