2014-02-10 109 views
-1

countries = Hash[ "north" => "nl", "no", "uk" "south" => "sp", "fr", "it" "east" => "ru", "bl", "bg" ]红宝石多哈希随机值

我怎样才能得到一个随机值对每个元素(北,南,东)?

非常感谢你

+3

虽然你'国家'哈希不是一个合适的哈希语法。 –

+0

请注意'v.sample'与'v [rand(v.size)]'相同。 –

回答

3

下面是使用Array#sample方式:

countries = {"north" => ["nl", "no", "uk"], "south" => ["sp", "fr", "it"], "east" => ["ru", "bl", "bg"] } 
countries.map { |_,v| v.sample } # => ["nl", "it", "bg"] 
countries.map { |_,v| v.sample } # => ["uk", "it", "bg"] 
+1

一个好的做法是使用'| _,v |'来避免创建一个未使用的局部变量。 –

+1

@MarkThomas是的,首先我做了'| k,v |',之后你的句子进入了我的大脑,所以我删除了'k',并将它作为'| _,v |'。感谢您的审查。 –

+0

好的,谢谢! countries.map {| _,v | v.sample} .each do | variable | puts变量 结束 如何为每个循环打印每个元素(北,南,东)? 即。放置“{#...}#{变量}” – user476918

3

替代奥雅纳的答案。

countries = {"north" => ["nl", "no", "uk"], "south" => ["sp", "fr", "it"], "east" => ["ru", "bl", "bg"]} 
countries.values.map(&:sample)