質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

Q&A

解決済

1回答

1361閲覧

RUBY グループ化した配列の表示を変えたい

tata1244

総合スコア5

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

0グッド

0クリップ

投稿2022/10/09 15:27

前提

rubyに関する質問です。

group_byしたデータをいつの配列にまとめ、かつ不要なデータを削除したい。

実現したいこと

カリキュラムの学習時間ごとにグループ化して表示させたい。

curriculum=[
[math,2]
[arithmetic,2]
[science,3]
]


[
{:hour=>2, :curriculum=>[math,arithmetic]},
{:hour=>3, :curriculum=>[science]},
]

と変えたい。

該当のソースコード

curriculum=[ [math,2] [arithmetic,2] [science,3] ] group_curriculum = curriculum.group_by{|a|a[1]} #group_curriculumには 2=>[[math,2],[arithmetic,2]],3=>[[science,3]] が入っていることを確認 group_curriculum.map do |hour,curriculum| a=[] b={:hour => hour, :curriculums => curriculum} puts b end #bには {:hour. => 2, :curriculums =>[[math,2],[arithmetic,2]]} {:hour. => 3, :curriculums =>[[science,3]} と出る

### どのように変えたいのか

最終的に
{:hour. => 2, :curriculums =>[[math,2],[arithmetic,2]]}
{:hour. => 3, :curriculums =>[[science,3]}

ではなく

[
{:hour=>2, :curriculum=>[math,arithmetic]},
{:hour=>3, :curriculum=>[science]},
]

と、hourでグループ化した、curriculumsの配列をくっつけて、さらに、curriculumの中にあるhourを削除したい;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ruby

1irb> curriculum = [ 2 ['math', 2], 3 ['arithmetic', 2], 4 ['science', 3], 5] 6irb> curriculum.group_by(&:last).map{|k, v| {:hour => k, :curriculums => v.collect(&:first)}} 7=> [{:hour=>2, :curriculums=>["math", "arithmetic"]}, {:hour=>3, :curriculums=>["science"]}]

投稿2022/10/09 15:56

melian

総合スコア19618

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tata1244

2022/10/09 16:10

コメントありがとうございます。助かりました。 ちなみにですが、collect(&:first)はどのような意味があるのでしょうか? ググったところ、collectはmapと同じ意味を持つことしか書いておらず、collect(&:first)に関しての理解ができませんでした
melian

2022/10/09 16:15

はい、map{|i| i[0]} と同じで、配列の最初の要素を集めます。map(&:first) としても構いません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問