我想创建一个名为default_classroom的方法。因此,它接受一个键数组和一个默认值,并返回一个散列,其中所有键都设置为默认值。(比如,所有的学生都去同一个教室。这里,student是键,class是默认值)
def default_classroom(students, default_class)
end
puts default_classroom([:jony, :marry], 8)
# should return => {jony: 8, marry: 8}
i did this:
def default_classroom(students, default_class)
Hash[ students, default_class]
end
还有这个
def default_classroom(students, default_class)
Hash[*students.flatten(default_class)]
end
但仍然不能工作。您能给我一些建议吗?我怎样才能完成呢?
有很多方法。
# 1
def default_classroom(students, default_class)
Hash[ students.product([default_class]) ]
end
students = %w[Billy-Bob, Trixie, Huck]
#=> ["Billy-Bob", "Trixie", "Huck"]
default_class = "Roofing 101"
default_classroom(students, default_class)
#=> {"Billy-Bob"=>"Roofing 101", "Trixie"=>"Roofing 101",
# "Huck"=>"Roofing 101"}
对于Ruby版本>= 2.0,你可以这样写:
students.product([default_class]).to_h
# 2
def default_classroom(students, default_class)
students.each_with_object({}) { |s,h| h[s] = default_class }
end
# 3
根据您的应用程序,您可能只需要指定哈希的默认值(而不需要为每个学生添加键值对)。在查看了hash# new的文档之后,您可能会认为应该这样做:
h = Hash.new(default_class)
#=> {}
:
h["Billy-Bob"] == "Real Analysis"
先:
"Roofing 101" == "Real Analysis"
#=> false
但是哈希值仍然为空:
h #=> {}
用块初始化哈希,如下所示:
h = Hash.new { |h,k| h[k]=default_class }
#=> {}
:
h["Billy-Bob"] == "Real Analysis"
再次求值为:
"Roofing 101" == "Real Analysis"
#=> false
但现在:
h #=> {"Billy-Bob"=>"Roofing 101"}