Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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/5/ruby/24.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 on rails Ruby数组转换的最佳方式_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Ruby数组转换的最佳方式

Ruby on rails Ruby数组转换的最佳方式,ruby-on-rails,ruby,Ruby On Rails,Ruby,实现以下目标的最佳方法是什么?我在ABC下有以下一系列行动 ABC:- 我想将其格式化为: ABC=>{Actions=>[ADD-DATA,TRANSFER-DATA,EXPORT,PRINT],Detail=>[Overview,Product-Detail,event log,orders]}可能有很多方法可以做到这一点,但这里有一种: a = ["ABC:Actions", "ABC:Actions:ADD-DATA", "ABC:Actions:TRANSFER-DATA", "ABC

实现以下目标的最佳方法是什么?我在ABC下有以下一系列行动

ABC:-

我想将其格式化为:


ABC=>{Actions=>[ADD-DATA,TRANSFER-DATA,EXPORT,PRINT],Detail=>[Overview,Product-Detail,event log,orders]}

可能有很多方法可以做到这一点,但这里有一种:

a = ["ABC:Actions",
"ABC:Actions:ADD-DATA",
"ABC:Actions:TRANSFER-DATA",
"ABC:Actions:EXPORT",
"ABC:Actions:PRINT",
"ABC:Detail",
"ABC:Detail:OVERVIEW",
"ABC:Detail:PRODUCT-DETAIL",
"ABC:Detail:EVENT-LOG",
"ABC:Detail:ORDERS"]

a.map { |action| action.split(":") }.inject({}) do |m, s|
  m[s.at(0)] ||= {}
  m[s.at(0)][s.at(1)] ||= [] if s.at(1)
  m[s.at(0)][s.at(1)] << s.at(2) if s.at(2)
  m
end
a=[“ABC:Actions”,
“ABC:操作:添加数据”,
“ABC:操作:传输数据”,
“ABC:操作:导出”,
“ABC:操作:打印”,
“ABC:细节”,
“ABC:细节:概述”,
“ABC:详细信息:产品详细信息”,
“ABC:详细信息:事件日志”,
“ABC:详细信息:订单”]
a、 map{{action}action.split(“:”)}.injection({})do{m,s|
m[s.at(0)]| |={}
m[s.at(0)][s.at(1)]| |=[]如果s.at(1)

m[s.at(0)][s.at(1)]{“细节”=>[]}
。然后,它将第三个元素添加到该数组中,以提供类似于
“ABC”=>{“Detail”=>[“OVERVIEW”]}
的内容。然后它进入下一个“拆分”数组,并以同样的方式将其添加到哈希中。

可能有很多方法可以做到这一点,但这里有一种:

a = ["ABC:Actions",
"ABC:Actions:ADD-DATA",
"ABC:Actions:TRANSFER-DATA",
"ABC:Actions:EXPORT",
"ABC:Actions:PRINT",
"ABC:Detail",
"ABC:Detail:OVERVIEW",
"ABC:Detail:PRODUCT-DETAIL",
"ABC:Detail:EVENT-LOG",
"ABC:Detail:ORDERS"]

a.map { |action| action.split(":") }.inject({}) do |m, s|
  m[s.at(0)] ||= {}
  m[s.at(0)][s.at(1)] ||= [] if s.at(1)
  m[s.at(0)][s.at(1)] << s.at(2) if s.at(2)
  m
end
a=[“ABC:Actions”,
“ABC:操作:添加数据”,
“ABC:操作:传输数据”,
“ABC:操作:导出”,
“ABC:操作:打印”,
“ABC:细节”,
“ABC:细节:概述”,
“ABC:详细信息:产品详细信息”,
“ABC:详细信息:事件日志”,
“ABC:详细信息:订单”]
a、 map{{action}action.split(“:”)}.injection({})do{m,s|
m[s.at(0)]| |={}
m[s.at(0)][s.at(1)]| |=[]如果s.at(1)

m[s.at(0)][s.at(1)]{“细节”=>[]}
。然后,它将第三个元素添加到该数组中,以提供类似于
“ABC”=>{“Detail”=>[“OVERVIEW”]}
的内容。然后它进入下一个“拆分”数组,并以同样的方式将其添加到哈希中。

我将按如下方式执行此操作:

a = ["ABC:Actions",
"ABC:Actions:ADD-DATA",
"ABC:Actions:TRANSFER-DATA",
"ABC:Actions:EXPORT",
"ABC:Actions:PRINT",
"ABC:Detail",
"ABC:Detail:OVERVIEW",
"ABC:Detail:PRODUCT-DETAIL",
"ABC:Detail:EVENT-LOG",
"ABC:Detail:ORDERS"]

m = a.map{|i| i.split(":")[1..-1]}
# => [["Actions"],
#     ["Actions", "ADD-DATA"],
#     ["Actions", "TRANSFER-DATA"],
#     ["Actions", "EXPORT"],
#     ["Actions", "PRINT"],
#     ["Detail"],
#     ["Detail", "OVERVIEW"],
#     ["Detail", "PRODUCT-DETAIL"],
#     ["Detail", "EVENT-LOG"],
#     ["Detail", "ORDERS"]]

m.each_with_object(Hash.new([])){|(i,j),ob| ob[i] = ob[i] + [j] unless j.nil? }
# => {"Actions"=>["ADD-DATA", "TRANSFER-DATA", "EXPORT", "PRINT"],
#     "Detail"=>["OVERVIEW", "PRODUCT-DETAIL", "EVENT-LOG", "ORDERS"]}

我将按以下方式进行:

a = ["ABC:Actions",
"ABC:Actions:ADD-DATA",
"ABC:Actions:TRANSFER-DATA",
"ABC:Actions:EXPORT",
"ABC:Actions:PRINT",
"ABC:Detail",
"ABC:Detail:OVERVIEW",
"ABC:Detail:PRODUCT-DETAIL",
"ABC:Detail:EVENT-LOG",
"ABC:Detail:ORDERS"]

m = a.map{|i| i.split(":")[1..-1]}
# => [["Actions"],
#     ["Actions", "ADD-DATA"],
#     ["Actions", "TRANSFER-DATA"],
#     ["Actions", "EXPORT"],
#     ["Actions", "PRINT"],
#     ["Detail"],
#     ["Detail", "OVERVIEW"],
#     ["Detail", "PRODUCT-DETAIL"],
#     ["Detail", "EVENT-LOG"],
#     ["Detail", "ORDERS"]]

m.each_with_object(Hash.new([])){|(i,j),ob| ob[i] = ob[i] + [j] unless j.nil? }
# => {"Actions"=>["ADD-DATA", "TRANSFER-DATA", "EXPORT", "PRINT"],
#     "Detail"=>["OVERVIEW", "PRODUCT-DETAIL", "EVENT-LOG", "ORDERS"]}

与小组成员一起做这件事很有趣:)


与小组成员一起做这件事很有趣:)


你有两个数组?一个具有
操作
和另一个具有
详细信息
或都在同一数组中?您有两个数组吗?一个带有
动作
,另一个带有
细节
或者都在同一个数组中?添加了一些解释。简洁地说有点难——或者至少对我来说有点难:)补充了一些解释。但要简洁地做到这一点有点难——或者至少对我来说有点难:)