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

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

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

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

Q&A

解決済

2回答

1918閲覧

rubyの2つの配列からhashを作成する方法

ayu

総合スコア212

Ruby

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

1グッド

1クリップ

投稿2016/07/03 13:43

こんばんわ。

http://www.rubylife.jp/ini/hash_class/index7.html

こちらを参考に配列から、配列を作成する方法で気になることがありました。

keyAry = ["suzuki", "itou", "yamada"] keyValue = [87, 76, 69] ary = [keyAry,keyValue].transpose h = Hash[*ary.flatten]

ここの最後のHash[*ary.flatten]と書いているところです。
*をつけることによる挙動がよくわかりませんでした。
当然のことながら、Hash[ary.flatten]では、メソッドが使用されないことはわかります。

hash作成時に*をつけるのは、可変長引数ではないと思うので、よろしければご教授をお願いしますm(_ _)m

DrqYuto👍を押しています

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

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

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

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

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

guest

回答2

0

一般的に splat 展開と呼ばれている文法です。可変長引数を受け付ける場所に対して配列を渡したりする場合に使います。

参考URL: http://alpaca.tc/blog/ruby/how-to-use-star.html

投稿2016/07/03 13:47

thinca

総合スコア1864

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

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

ayu

2016/07/03 23:07

splat展開と呼ばれるものだったのですね。 ありがとうございます!
guest

0

ベストアンサー

think さんの回答に補足で,ary.flattenでできるものって配列であって,1変数扱いなんですよね.

なので,例えば下記のような 2変数を受け取るメソッドに[1,2]という配列を渡すと,配列を表す 1変数しか渡してないから,呼び出し変数が足りないと怒られるんですよ.
でも,splat 展開で渡すと,配列を展開して渡してくれるので,a1b2を入れた状態でメソッドを呼びだせるわけです.

def test(a, b) "#{a} : #{b}" end test [1,2] #=> Error: 変数が足りない test *[1,2] #=> "1 : 2"

まぁこういう使い方はかなり特殊な例で,一般には thinca さんの言うように可変長引数に対して配列を 1変数としてでなく展開して渡したい場面で使うことが多いのですが,動作としてはこっちの方がわかりやすいかと思うので,補足させてもらいました.

投稿2016/07/03 16:00

tamy

総合スコア442

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

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

tamy

2016/07/03 16:03

あ,ちなみに質問に関係ないですが,`[keyAry,keyValue].transpose`の部分は`keyAry.zip(keyValue)`の方がタイプ数少なくて楽ですよ
ayu

2016/07/03 23:06

詳しい説明ありがとうございますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問