Arrays 如何将嵌套数组转换为值为数组的哈希或JSON
我有这个嵌套数组Arrays 如何将嵌套数组转换为值为数组的哈希或JSON,arrays,json,ruby,hash,Arrays,Json,Ruby,Hash,我有这个嵌套数组 array = [["Colorado", "Adams County"], ["Colorado", "Jefferson County"], ["California", "Amador"], ["California", "Tulare"]] 我在等这个 {"Colorado" => ["Adams County", "Jefferson County"], "California" => ["Amador", "Tulare"]} 我试过这些: arra
array = [["Colorado", "Adams County"], ["Colorado", "Jefferson County"], ["California", "Amador"], ["California", "Tulare"]]
我在等这个
{"Colorado" => ["Adams County", "Jefferson County"], "California" => ["Amador", "Tulare"]}
我试过这些:
array.to_h
#=> {"Colorado"=>"Jefferson County", "California"=>"Tulare"}
b = Hash.new
array.uniq.map{|k,v| b[k] = v}
#=> {"Colorado"=>"Jefferson County", "California"=>"Tulare"}
array.uniq.map{|k,v| b[k] << v}
#=> Error
array.map{|k,v| b[k] = [v]}
#=> {"Colorado"=>["Jefferson CountyAdams CountyJefferson CountyAdams County"], "California"=>["TulareAmadorTulareAmador"]}`
array.to_h
#=>{“科罗拉多州”=>“杰斐逊县”、“加利福尼亚州”=>“图拉雷”}
b=散列。新
array.uniq.map{| k,v | b[k]=v}
#=>{“科罗拉多州”=>“杰斐逊县”、“加利福尼亚州”=>“图拉雷”}
数组.uniq.map{| k,v | b[k]错误
array.map{| k,v | b[k]=[v]}
#=>{“Colorado”=>[“Jefferson CountyYadams CountyJefferson CountyYadams County”],“California”=>[“Tularemadortulareamador”]}`
如何将值作为数组获取?看起来您希望按第一个元素重新组合数组数组
array
.group_by { |k, _| k }
.each_value { |a| a.map! { |_, v| v } } # => {"Colorado"=>["Adams County", "Jefferson County"], "California"=>["Amador", "Tulare"]}
您可以首先通过调用
group\u,然后转换\u值
(Ruby 2.4+):
如果您的ruby没有transform\u值
,您可以只map!
:
hash = array.group_by(&:first)
hash.each_value do |value_list|
value_list.map!(&:last)
end
# => {"Colorado"=>["Adams County", "Jefferson County"], "California"=>["Amador", "Tulare"]}
array
和c
之间有什么区别?(array
首先是什么?)什么是b
?对不起,我在控制台上做了一些工作,我现在已经编辑了变量。应该更清楚了每个值如何
?哦,我喜欢移位值。但是array怎么样?groupby(&:shift).每个_值(&:展平!)
?在早期的Ruby版本中也可以使用,而且有点短。很酷。。每个_值
都很好。只是想知道,是否可以使用。排序
和展平
对数组值进行排序?说到排序……上面显示的输出真的是从代码中得到的吗?它真的是“加利福尼亚”吗在“Colorado”之前出现?这是否违反了“密钥插入顺序”@StefanPochmann这是pry
输出结果的方式:它对散列进行排序。
hash = array.group_by(&:first)
hash.each_value do |value_list|
value_list.map!(&:last)
end
# => {"Colorado"=>["Adams County", "Jefferson County"], "California"=>["Amador", "Tulare"]}
[["Colorado", "Adams County"], ["Colorado", "Jefferson County"],
["California", "Amador"], ["California", "Tulare"]].
each_with_object(Hash.new { |h, k| h[k] = [] }) do |(k, v), h|
h[k] << v
end
#⇒ {
# "California" => [
# [0] "Amador",
# [1] "Tulare"
# ],
# "Colorado" => [
# [0] "Adams County",
# [1] "Jefferson County"
# ]
# }
[["Colorado", "Adams County"], ["Colorado", "Jefferson County"],
["California", "Amador"], ["California", "Tulare"]].
group_by(&:shift).transform_values(&:flatten)