尝试在ruby中转换此哈希的结构
我有这个杂烩:尝试在ruby中转换此哈希的结构,ruby,Ruby,我有这个杂烩: { :items => { :"cust.category" => "Jackets,Belts & Buttons", :"items.receive_dt" => "2 years", :"prdcts.brand" => "Armani" } } 我正在尝试更改此哈希,使其成为--> 我已经尝试了一些方法,但没有成功有很多不同的方法可以实现这一点,这里有一种方法是使用在散列中添加一个: 您的哈希将如下所示:
{
:items => {
:"cust.category" => "Jackets,Belts & Buttons",
:"items.receive_dt" => "2 years",
:"prdcts.brand" => "Armani"
}
}
我正在尝试更改此哈希,使其成为-->
我已经尝试了一些方法,但没有成功有很多不同的方法可以实现这一点,这里有一种方法是使用
在散列中添加一个
:
您的哈希将如下所示:
hash={
:项目=>{
:“客户类别”=>“夹克、皮带和纽扣”,
:“物品。收到”=>“2年”,
:“prdcts.brand”=>“阿玛尼”
}
}
然后,您可以通过将hash[:items]
转换为一个数组,然后使用map
将结果转换为连接字符串的单个数组来更改哈希:
hash[:items]=hash[:items].to_a.map{a | a.join('=')}
最后的散列
将如下所示:
{
:项目=>[
“客户类别=夹克、皮带和纽扣”,
“项目接收时间=2年”,
“prdcts.brand=Armani”
]
}
请参阅。Ruby 2.7
hash={
:项目=>{
:“客户类别”=>“夹克、皮带和纽扣”,
:“物品。收到”=>“2年”,
:“prdcts.brand”=>“阿玛尼”
}
}
pp hash.to|h{k,v|[k,v.map{e|e.join('=')}]
输出
{:items=>
["cust.category=Jackets,Belts & Buttons",
"items.receive_dt=2 years",
"prdcts.brand=Armani"]
}
这将创建一个副本,因此值得注意的是使用
transform\u值更改原始结构
。我不知道将Hash改为#h
,这允许它有一个块。一个细节:come似乎是在v2.6中制作的。@CarySwoveland我相信所有方法都允许有一个块。例如,在Ruby 2.1.10中为Hash#to_h
提供块时,没有出现错误。为了不“允许”一个块,如果给定一个块,就需要编写代码来引发错误。通常,如果我们不想对块做任何事情,我们就忽略它们。与“不允许”不同。也许“忽略”是一个更好的描述。@vgoff,我好久没听到某人的好话了:“abc”。upcase{“让我们看看这个块是否有问题”}=>“abc”
“[I]无法正确”不是一个足够精确的错误描述,我们无法帮助您。什么不起作用?它怎么不起作用?你的代码有什么问题?你收到错误信息了吗?错误消息是什么?你得到的结果不是你期望的结果吗?你期望得到什么样的结果?为什么?你会得到什么样的结果?两者有什么不同?你观察到的行为是否不是期望的行为?期望的行为是什么?为什么?观察到的行为是什么?它们有什么不同?
h = {
:items=>{
:"cust.category"=>"Jackets,Belts & Buttons",
:"items.receive_dt"=>"2 years",
:"prdcts.brand"=>"Armani"
}
h.transform_values { |g| g.map { |a| a.join('=') } }
#=> {:items=>["cust.category=Jackets,Belts & Buttons",
# "items.receive_dt=2 years",
# "prdcts.brand=Armani"]
# }
{:items=>
["cust.category=Jackets,Belts & Buttons",
"items.receive_dt=2 years",
"prdcts.brand=Armani"]
}