我有以下哈希:
public IActionResult Spa()
{
return File("~/index.html", "text/html");
}
我想将每个内部哈希中的键my_hash = {
"redis_1"=>{"group"=>"Output", "name"=>"Redis", "parameters"=>{"redis_db"=>2, "redis_password"=>"<password>"}},
"file_1"=>{"name"=>"File", "group"=>"Output", "parameters"=>{"file"=>"/opt/var/lib/bots/file-output/ctt.txt", "hierarchical_output"=>false}}
}
移动到第一个位置,如下所示:
parameters
我有以下代码:
my_hash = {
"redis_1"=>{"parameters"=>{"redis_db"=>2, "redis_password"=>"<password>"}, "group"=>"Output", "name"=>"Redis"},
"file_1"=>{"parameters"=>{"file"=>"/opt/var/lib/bots/file-output/ctt.txt", "hierarchical_output"=>false}, "name"=>"File", "group"=>"Output"}
}
我没有收到任何错误,但是这段代码没有做任何事情,而且我对如何达到我想要的输出感到很遗憾。
答案 0 :(得分:1)
my_hash
.each {|k, v| my_hash[k] = {"parameters" => v.delete("parameters")}.merge(v)}
或
my_hash
.each_value{|v| v.replace({"parameters" => v.delete("parameters")}.merge(v))}
返回值:
{
"redis_1"=>{"parameters"=>{"redis_db"=>2, "redis_password"=>"<password>"}, "group"=>"Output", "name"=>"Redis"},
"file_1"=>{"parameters"=>{"file"=>"/opt/var/lib/bots/file-output/ctt.txt", "hierarchical_output"=>false}, "name"=>"File", "group"=>"Output"}
}
答案 1 :(得分:1)
让我们调试你的代码:
my_hash.each_pair do |key, value|
p value.sort_by {|k, v| k == "parameters" ? 0 : 1}
end
输出:
[["parameters", {"redis_db"=>2, "redis_password"=>"<password>"}], ["group", "Output"], ["name", "Redis"]]
[["parameters", {"file"=>"/opt/var/lib/bots/file-output/ctt.txt", "hierarchical_output"=>false}], ["name", "File"], ["group", "Output"]]
正确排序对,但是:
对于第一个问题,您可以使用to_h
。
对于第二个,您可以使用Ruby 2.4中提供的transform_values!
。
这是工作代码,它与您提出的方法非常相似:
my_hash.transform_values! do |subhash|
subhash.sort_by { |k, _| k == 'parameters' ? 0 : 1 }.to_h
end