我有一個這樣的陣列:
[["vietnam", "H? Chí Minh", "ho-chi-minh", 131],
["vietnam", "Hà N?i", "ha-noi", 96],
["lao", "Vien", "vien", 26],
["thailand", "Bangkok", "bangkok", 11],
["vietnam", "??ng Nai", "dong-nai", 10],
["china", "Shanghai", "shanghia", 8],
["lao", "ABC", "abcc", 24],
["vietnam", "Long An", "long-an", 6]]
我想根據陣列元素的第一個元素生成一個帶有鍵的哈希函式,如下所示
{:vietnam =>
[["H? Chí Minh", "ho-chi-minh", 131],
["Hà N?i", "ha-noi", 96],
["Long An", "long-an", 6]],
:lao =>
[["Vien", "vien", 26],
["ABC", "abcc", 24]],
:thailand =>
[["Bangkok", "bangkok", 11]],
:china =>
[["Shanghai", "shanghai", 8]]
}
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
使用的組合功率group_by和Array#shift
array = [["vietnam", "H? Chí Minh", "ho-chi-minh", 131],
["vietnam", "Hà N?i", "ha-noi", 96],
["lao", "Vien", "vien", 26],
["thailand", "Bangkok", "bangkok", 11],
["vietnam", "??ng Nai", "dong-nai", 10],
["china", "Shanghai", "shanghia", 8],
["lao", "ABC", "abcc", 24],
["vietnam", "Long An", "long-an", 6]
]
hash = array.group_by { |e| e.shift }
輸出
=> {
"vietnam" => [["H? Chí Minh", "ho-chi-minh", 131], ["Hà N?i", "ha-noi", 96], ["??ng Nai", "dong-nai", 10], ["Long An", "long-an", 6]],
"lao" => [["Vien", "vien", 26], ["ABC", "abcc", 24]],
"thailand" => [["Bangkok", "bangkok", 11]],
"china" => [["Shanghai", "shanghia", 8]]
}
uj5u.com熱心網友回復:
您可以使用 ruby group_by方法:
array = [["vietnam", "H? Chí Minh", "ho-chi-minh", 131],
["vietnam", "Hà N?i", "ha-noi", 96],
["lao", "Vien", "vien", 26],
["thailand", "Bangkok", "bangkok", 11],
["vietnam", "??ng Nai", "dong-nai", 10],
["china", "Shanghai", "shanghia", 8],
["lao", "ABC", "abcc", 24],
["vietnam", "Long An", "long-an", 6]]
hash = array.group_by { |a| a[0] }
# {"vietnam"=>[["vietnam", "H? Chí Minh", "ho-chi-minh", 131], ["vietnam", "Hà N?i", "ha-noi", 96], ["vietnam", "??ng Nai", "dong-nai", 10], ["vietnam", "Long An", "long-an", 6]], "lao"=>[["lao", "Vien", "vien", 26], ["lao", "ABC", "abcc", 24]], "thailand"=>[["thailand", "Bangkok", "bangkok", 11]], "china"=>[["china", "Shanghai", "shanghia", 8]]}
hash.each { |k, v| hash[k] = v.map { |arr| arr.drop(1) } }
# {"vietnam"=>[["H? Chí Minh", "ho-chi-minh", 131], ["Hà N?i", "ha-noi", 96], ["??ng Nai", "dong-nai", 10], ["Long An", "long-an", 6]], "lao"=>[["Vien", "vien", 26], ["ABC", "abcc", 24]], "thailand"=>[["Bangkok", "bangkok", 11]], "china"=>[["Shanghai", "shanghia", 8]]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/314056.html
