Ruby 如何使散列创建更美观
我想知道是否有一种更优雅的方式来写以下几行:Ruby 如何使散列创建更美观,ruby,Ruby,我想知道是否有一种更优雅的方式来写以下几行: section_event_hash = [] sections.each do |s| section_event_hash << { s => s.find_all_events } end section\u event\u hash=[] 节。每个节都有| 部分\u事件\u哈希s.find\u所有\u事件} 结束 我想创建一个散列,其键是节的元素,值是查找所有事件方法返回的元素数组。如果希望节事件\u散列真正是散列
section_event_hash = []
sections.each do |s|
section_event_hash << { s => s.find_all_events }
end
section\u event\u hash=[]
节。每个节都有|
部分\u事件\u哈希s.find\u所有\u事件}
结束
我想创建一个散列,其键是
节的元素,值是查找所有事件方法返回的元素数组。如果希望节事件\u散列
真正是散列而不是数组,那么可以使用:
您可以使用map
构建数组数组,然后将其馈送到:
如果希望section\u event\u hash
真正成为散列而不是数组,则可以使用:
您可以使用map
构建数组数组,然后将其馈送到:
你发布的代码没有达到你所说的目的。让我们通过类似的测试来仔细观察它:
sections = ["ab", "12"]
section_event_hash = []
sections.each do |s|
section_event_hash << { s => s.split("") }
end
puts section_event_hash.inspect
实际上,您已经创建了一个哈希数组,其中每个哈希包含一个键值对
下面的代码生成一个包含多个元素的哈希。请注意如何使用{}而不是[]创建空哈希。大括号是散列的符号,而方括号表示特定的键
section_event_hash = {}
sections.each do |s|
section_event_hash[s] = s.split("")
end
puts section_event_hash.inspect
=>{“ab”=>[“a”,“b”],“12”=>[“1”,“2”]}
至于“更优雅”的方式,这取决于你的定义。正如这里的其他答案所展示的,在ruby中通常有不止一种方法来做某事。seph产生与原始代码相同的数据结构,而mu产生您描述的散列。就我个人而言,我的目标是编写易于阅读、理解和维护的代码。您发布的代码并没有达到您所希望的效果。让我们通过类似的测试来仔细观察它:
sections = ["ab", "12"]
section_event_hash = []
sections.each do |s|
section_event_hash << { s => s.split("") }
end
puts section_event_hash.inspect
实际上,您已经创建了一个哈希数组,其中每个哈希包含一个键值对
下面的代码生成一个包含多个元素的哈希。请注意如何使用{}而不是[]创建空哈希。大括号是散列的符号,而方括号表示特定的键
section_event_hash = {}
sections.each do |s|
section_event_hash[s] = s.split("")
end
puts section_event_hash.inspect
=>{“ab”=>[“a”,“b”],“12”=>[“1”,“2”]}
至于“更优雅”的方式,这取决于你的定义。正如这里的其他答案所展示的,在ruby中通常有不止一种方法来做某事。seph产生与原始代码相同的数据结构,而mu产生您描述的散列。就我个人而言,我的目标是编写易于阅读、理解和维护的代码。问题还不清楚。变量名section\u event\u hash
表明它是一个散列,您的代码为它分配了一个数组,您说要创建一个散列。问题不清楚。变量名section\u event\u hash
表明它是一个散列,您的代码为它分配了一个数组,您说要创建一个散列。
[{"ab"=>["a", "b"]}, {"12"=>["1", "2"]}]
section_event_hash = {}
sections.each do |s|
section_event_hash[s] = s.split("")
end
puts section_event_hash.inspect