Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.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_Hash - Fatal编程技术网

Ruby on rails ruby中使用多数组值的哈希

Ruby on rails ruby中使用多数组值的哈希,ruby-on-rails,ruby,hash,Ruby On Rails,Ruby,Hash,如何尝试为以下输入构建哈希 [["Company", "Add"], ["Company", "Edit"], ["Company", "Delete"], ["Company", "List"], ["Caterer", "Add"], ["Caterer", "Edit"], ["User", "Add"]] 输出应该是 [{'Company'=>['Add', 'List', 'Edit', 'Delete']}, {'Caterer'=>['Add', 'List',

如何尝试为以下输入构建哈希

[["Company", "Add"], ["Company", "Edit"], ["Company", "Delete"], ["Company", "List"], ["Caterer", "Add"], ["Caterer", "Edit"], ["User", "Add"]] 
输出应该是

[{'Company'=>['Add', 'List', 'Edit', 'Delete']},
 {'Caterer'=>['Add', 'List', 'Edit', 'Delete']},
 {'User'=>['Add']}]
尝试1:

input = [["Company", "Add"], ["Company", "Edit"], ["Company", "Delete"], ["Company", "List"], ["Caterer", "Add"], ["Caterer", "Edit"], ["User", "Add"]]
a=[]
input.each do |inp|
  tmp = Hash.new
  a<< tmp.update(inp[0] => inp[1])
end
这应该行得通

result={}
[["Company", "Create"], ["Company", "Edit"], ["Company", "Delete"], ["Company", "List"], ["Caterer", "Create"], ["Caterer", "Edit"], ["User", "Add"]].each do  |value|
   result[value[0]]=[] unless result.has_key? value[0]
   result[value[0]] << value[1]
end
puts result.to_s

{"Company"=>["Create", "Edit", "Delete", "List"], "Caterer"=>["Create", "Edit"], "User"=>["Add"]}
编辑:我刚刚看到您需要一个成对数组,而不是散列。您可以通过以下方式实现:

as_hash.map { |pair| Hash[*pair] }

你试过什么吗?请分享你的努力,“创造”是怎么回事?是不是因为输入也错误,所以输出不匹配?@检查我的结果,从中可以对键和值进行分组?@FerdinandRosario yep,使用
group_by{x | x.keys.first}
餐饮服务商
键是错误的,就像
公司
一样<代码>{“Company”=>[“Create”、“Edit”、“Delete”、“List”],“Caterer”=>[“Create”、“Edit”],“User”=>[“Add”]}如下所示,输出与OP不同,也是创建一个
hash
,但OP需要一个hashesanyway数组,
{“Company”=>[“Add”、“List”、“Edit”、“Delete”],“Caterer”=>[“Add”、“Edit”],“User”=>“Add”}”}
这与我们想要的不一样
Caterer
是错误的。它还创建了一个散列,但OP需要一个散列数组。@。再次感谢!
r=result.map{|k,v| {k=>v} }
input = [["Company", "Add"], ["Company", "Edit"], ["Company", "Delete"], ["Company", "List"], ["Caterer", "Add"], ["Caterer", "Edit"], ["User", "Add"]]

as_hash = input.group_by(&:first)
as_hash.each do |entity, actions|
  as_hash[entity] = actions.flatten.reject do |action|
    action == entity
  end.sort_by { |action| ['Add', 'List', 'Edit', 'Delete'].index action }
end
as_hash.map { |pair| Hash[*pair] }