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

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

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

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

Q&A

解決済

1回答

6418閲覧

ハッシュのkeyを変更(追加)したい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

0クリップ

投稿2016/12/11 08:12

Rubyです。

実行結果----------
AA , 79
BB , 54
CC , 33


という実行結果にそれぞれ文字列を追加して、
実行結果------------
AA(a, aa), 79
BB(bb) , 54
CC(cc) , 33


という実行結果にしたいです。
いろいろ調べたのですが、わからないので教えていただきたいです。

a = {"AA"=>79, "BB"=>54, "CC"=>33}
というハッシュから実行結果を得ています。
後から追加したい文字列はCSVファイルを読み込んで、
b = [["AA", "a, aa]", ["BB", "bb"], ["CC", "cc"]]
という配列にして格納しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

解法の一例としまして、以下のように、h = Hash[*b.flatten] として、
bをハッシュにするという方法でいかがでしょうか。


[ykt68@macbp15 ~]$ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]
[ykt68@macbp15 ~]$ cat tera58437.rb

ruby

1#! /usr/bin/env ruby 2# coding: utf-8 3 4a = {"AA"=>79, "BB"=>54, "CC"=>33} 5 6b = [["AA", "a, aa"], ["BB", "bb"], ["CC", "cc"]] 7 8h = Hash[*b.flatten] # b をハッシュにする。 9 10a.each do |k,v| 11 puts "#{k}(#{h[k]}), #{v}" 12end

[ykt68@macbp15 ~]$ ruby tera58437.rb
AA(a, aa), 79
BB(bb), 54
CC(cc), 33
[ykt68@macbp15 ~]$


以上ご参考になれば幸いです。

【追記】

上記のコードで、bからhを作るのに、お使いのRubyのバージョンが、2.1以上であれば、

to_h
https://docs.ruby-lang.org/ja/latest/method/Array/i/to_h.html

というメソッドがあり、これを使えば、より簡単に

ruby

1h = b.to_h

でOKではないかと思います。(私の手元にあるRubyが、2.0なので試せませんが)

【追記2】
別の解法です。
もし、お使いのRubyのバージョンが、2.1以上であれば、to_hを使って、
目的のハッシュ c を、以下のようにして作ることが出来ると思います。

ruby

1#! /usr/bin/env ruby 2# coding: utf-8 3 4a = {"AA"=>79, "BB"=>54, "CC"=>33} 5 6b = [["AA", "a, aa"], ["BB", "bb"], ["CC", "cc"]] 7 8c = b.map {|x| [ "#{x[0]}(#{x[1]})", a[x[0]] ] }.to_h # => {"AA(a, aa)"=>79, "BB(bb)"=>54, "CC(cc)"=>33}

ご参考まで。

投稿2016/12/11 11:04

編集2016/12/11 12:45
jun68ykt

総合スコア9058

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

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

退会済みユーザー

退会済みユーザー

2016/12/12 06:33

丁寧な回答ありがとうございます! おかげさまで解決しました!
jun68ykt

2016/12/12 06:43

解決されたとのことで、よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問