假设我有以下二维数组(未排序)
[["Abigail", 1047], ["Betty", 1049], ["Alfred", 1048], ["Bernadette", 1050]]
如何根据第一个元素的第一个字母将其转换为具有字母键的哈希值?密钥需要根据它们的第一个元素(即本例中的人名)对数组元素进行排序:
{
'A' => [['Abigail','1047'], ['Alfred','1048']],
'B' => [['Bernadette','1050'], ['Betty','1049']]
}
答案 0 :(得分:4)
a = [["Abigail", 1047], ["Betty", 1049], ["Alfred", 1048], ["Bernadette", 1050]]
p Hash[a.sort.chunk{|x| x[0][0]}.to_a]
适用于1.9.x
答案 1 :(得分:3)
a = [["Abigail", 1047], ["Betty", 1049], ["Alfred", 1048], ["Bernadette", 1050]]
p a.sort.group_by{|el| el.first[0]}
sort
数组,以确保哈希中的键被排序(在1.9中),group_by
第一个元素的第一个字母(名称)。
答案 2 :(得分:1)
names_and_values = [["Abigail", 1047], ["Betty", 1049], ["Alfred", 1048], ["Bernadette", 1050]]
#=> [["Abigail", 1047], ["Betty", 1049], ["Alfred", 1048], ["Bernadette", 1050]]
names_and_values.sort.reduce({}) do |memo, name_and_value|
name = name_and_value[0]
initial = name[0]
( memo[initial] ||= [] ) << name_and_value
memo
end
#=> {"A"=>[["Abigail", 1047], ["Alfred", 1048]], "B"=>[["Bernadette", 1050], ["Betty", 1049]]}