0

次の 2 次元配列 (ソートされていない) があるとします。

[["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 に答える