0

假设我有以下二维数组(未排序)

[["Abigail", 1047], ["Betty", 1049], ["Alfred", 1048], ["Bernadette", 1050]]

如何根据第一个元素的第一个字母将其转换为带有字母键的哈希?需要根据第一个元素(即本例中的人名)对键和数组元素进行排序:

{
'A' => [['Abigail','1047'], ['Alfred','1048']],
'B' => [['Bernadette','1050'], ['Betty','1049']]
}
4

3 回答 3

4
a = [["Abigail", 1047], ["Betty", 1049], ["Alfred", 1048], ["Bernadette", 1050]]
p Hash[a.sort.chunk{|x| x[0][0]}.to_a]

适用于 1.9.x

于 2013-01-28T17:15:51.463 回答
3
a = [["Abigail", 1047], ["Betty", 1049], ["Alfred", 1048], ["Bernadette", 1050]]
p a.sort.group_by{|el| el.first[0]}

sort确保散列中的键已排序的数组(在 1.9 中),group_by第一个元素的第一个字母(名称)。

于 2013-01-28T17:13:34.667 回答
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]]}
于 2013-01-28T17:06:01.207 回答