Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何使散列创建更美观_Ruby - Fatal编程技术网

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