ruby 哈希,其中键来自数组,值作为默认值
Posted
技术标签:
【中文标题】ruby 哈希,其中键来自数组,值作为默认值【英文标题】:ruby hash where keys are from an array and value as a default value 【发布时间】:2014-10-10 16:07:32 【问题描述】:我想创建一个名为 default_clas-s-room 的方法。这样它就需要一个键数组和一个默认值,并返回一个哈希值,其中所有键都设置为默认值。 (就像,所有学生都去同一个教室。这里,学生是键和班级作为默认值)
def default_clas-s-room(students, default_class)
end
puts default_clas-s-room([:jony, :marry], 8)
# should return => jony: 8, marry: 8
我这样做了:
def default_clas-s-room(students, default_class)
Hash[ students, default_class]
end
还有这个:
def default_clas-s-room(students, default_class)
Hash[*students.flatten(default_class)]
end
但仍然无法正常工作。请您给我建议,我该如何完成?
【问题讨论】:
Rabby,我很欣赏这个新手,但以后考虑在选择答案之前等待更长时间。匆忙做出判断可能会阻碍其他可能更好的答案,并且对于那些在复选标记出现时仍在准备答案的人来说是一个遗憾。许多 SO 成员要等上几个小时甚至几天。 加里·斯沃夫兰,感谢您的建议。但我太兴奋了。 这里不应该有 Rails 标签,因为这是一个纯 Ruby 问题。有一个多余的标签可能会导致一些人浪费时间,而另一些人(他们过滤掉 Rails 问题)看不到问题。 Cary Swoveland,我编辑了标签部分。 【参考方案1】:有很多方法可以做到这一点。这是三个。
#1
def default_clas-s-room(students, default_class)
Hash[ students.product([default_class]) ]
end
students = %w[Billy-Bob, Trixie, Huck]
#=> ["Billy-Bob", "Trixie", "Huck"]
default_class = "Roofing 101"
default_clas-s-room(students, default_class)
#=> "Billy-Bob"=>"Roofing 101", "Trixie"=>"Roofing 101",
# "Huck"=>"Roofing 101"
对于 >= 2.0 的 Ruby 版本,您可以改为:
students.product([default_class]).to_h
#2
def default_clas-s-room(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"
【讨论】:
以上是关于ruby 哈希,其中键来自数组,值作为默认值的主要内容,如果未能解决你的问题,请参考以下文章