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

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

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

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

Ruby on Rails

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

Q&A

解決済

3回答

1319閲覧

Rubyで複数の変数をハッシュに格納したいです

rubyist

総合スコア1

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/02 14:05

編集2020/05/02 14:35

前提・実現したいこと

Rubyで複数の変数に格納されているデータを、ハッシュに格納したいです。
理由は、スクレイピングデータを変数に格納したのですが、ハッシュになっていないため、同一レコードでDBに保存することができないためです、、。

例として、下記のa,b,cの変数内にある要素をハッシュに入れるにはどのように書けば入れることができるのか、ご教授いただけますと幸いです。
(参考文献だけでも頂きたいです、、。)

a = [a1,a2,a3,a4,a5]
b = [b1,b2,b3,b4,b5]
c = [c1,c2,c3,c4,c5]

{AAA:a1, BBB:b1, CCC:c1}
{AAA:a2, BBB:b2, CCC:c2}
{AAA:a3, BBB:b3, CCC:c3}
{AAA:a4, BBB:b4, CCC:c4}
{AAA:a5, BBB:b5, CCC:c5}

☆AAAがキー、a1を値にしたいです

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

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

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

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

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

Yasumichi

2020/05/02 14:18

ここでハッシュといっているのは、ハッシュテーブルのことでよろしいでしょうか? Python だと辞書(Dictionary)と呼んでいますが。 あと、何をキーにするつもりか、考えていますか?
Yasumichi

2020/05/02 14:21

Python と Ruby の両方のタグがついていますが、どっちの言語が正しいですか?
rubyist

2020/05/02 14:30

>ここでハッシュといっているのは、ハッシュテーブルのことでよろしいでしょうか? はい、その通りです。 >何をキーにするつもりか すでにrailsにてテーブルは作成済みのため、そのテーブルのカラム名がキーとなる見込みです。 >どっちの言語が正しいですか? 失礼しました、、 Rubyです、、。
guest

回答3

0

ベストアンサー

x.rb

ruby

1a = %w[a1 a2 a3 a4 a5] 2b = %w[b1 b2 b3 b4 b5] 3c = %w[c1 c2 c3 c4 c5] 4d = %w[c¥d1 d2 d3 d4 d5] 5 6KEYS = %i[AAA BBB CCC].freeze 7 8info = [a, b, c, d] 9hashs = info.transpose.map { |vals| KEYS.zip(vals).to_h } 10pp hashs

データの数が 3 つでなく、 100 個とかになった場合でも
すべてのデータを 配列 info にまとめさえすれば 配列のサイズに左右されずに
info.transpose.map { |vals| KEYS.zip(vals).to_h }
でハッシュ変換結果が得られます。

実行例
イメージ説明

参考情報

  • Array から Hash を作る方法7選

https://tech.raksul.com/2018/02/06/ruby_array_to_hash/

投稿2020/05/03 00:03

katoy

総合スコア22324

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

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

0

キーとzipしてto_hします。こんな感じで。

Ruby

1a = %w/a1 a2 a3 a4 a5/ 2b = %w/b1 b2 b3 b4 b5/ 3c = %w/c1 c2 c3 c4 c5/ 4 5KEY = %i/AAA BBB CCC/ 6 7hash = a.zip(b,c).map do |x| 8 KEY.zip(x).to_h 9end 10 11p hash 12#=> 13[{:AAA=>"a1", :BBB=>"b1", :CCC=>"c1"}, 14 {:AAA=>"a2", :BBB=>"b2", :CCC=>"c2"}, 15 {:AAA=>"a3", :BBB=>"b3", :CCC=>"c3"}, 16 {:AAA=>"a4", :BBB=>"b4", :CCC=>"c4"}, 17 {:AAA=>"a5", :BBB=>"b5", :CCC=>"c5"}]

投稿2020/05/02 16:39

otn

総合スコア84830

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

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

0

transpose使ったらいけると思います

こちら参考です
https://www.javadrive.jp/ruby/array_class/index15.html

投稿2020/05/02 14:13

hiyashikyuri

総合スコア388

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

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

rubyist

2020/05/02 14:31

確認してみます! ご回答ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問