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 哈希,其中键来自数组,值作为默认值的主要内容,如果未能解决你的问题,请参考以下文章

使用数组键和默认值填充哈希

使用来自另一个哈希的新值更新了 Ruby 哈希数组

ruby 符号作为键,但无法从哈希中获取值

ruby 在哈希中删除相同的值多个键

Ruby 优雅的方式为版本字符串提供默认数组值

汇总所有相似哈希键的值 Ruby