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

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

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

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

Q&A

解決済

3回答

4305閲覧

Rubyのmapメソッドがよくわかりません。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

1クリップ

投稿2016/07/08 09:49

Aizu Online Judgeで勉強しているのですが、Rubyのmapメソッドがよくわかりません。

a,b = gets.chomp.split(' ').map{|x|x.to_i}

と書かれているのですが、mapメソッドと.map{}内はどういった動きをするのでしょうか?

ググって、APIを見たのですが、さっぱりわかりません。

APIが苦手で、うまく読めないので、教えてください。

よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

参考情報:

...
map / collect
各要素に対して{}ブロック内の 式を実行した結果 を返します。
collect は map と同義です。
# すべて3倍にして返す
[1, 2, 3].map { |n| n * 3 }
# => [3, 6, 9]

...
まずeachメソッドで書いてみる
...
a.each {|e| puts e.rjust(l) }
...
mapメソッドを使ってみる
...
a = a.map {|e| e.rjust(l) }
puts a
...

投稿2016/07/09 06:01

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2016/07/09 06:50

回答ありがとうございます。 まずeachメソッドで書いてみるのはいいかもしれませんね。 eachメソッドは苦手なので、勉強します。 ありがとうございました。
guest

0

ベストアンサー

mapというのは数学の「写像」「関数」という意味です。

gets.chomp.split(' ')までは分かると言うことですよね?
1 23を入力すると、["1", "23"]という文字列の配列になります。

mapは関数なので、map{|x| x.to_i}は、数学で言う f(x) = x.to_i というようなイメージです。
配列の各要素に関数を適用します。[f("1"), f("23")]["1".to_j, "23".to_i][1, 23]

投稿2016/07/08 12:56

otn

総合スコア84423

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

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

退会済みユーザー

退会済みユーザー

2016/07/08 23:53

回答ありがとうございます。 なるほど。f(x) = x.to_iはイメージしやすかったです。 ありがとうございました。
guest

0

mapメソッドは,ブロック内を評価した結果で新しい配列を作成し,返します.

例示されているgets.chomp.split(' ').map{|x|x.to_i}の場合,標準入力から取得した文字列(gets.chomp部分)を空白区切で分割(split(' ')部分)したのち,全ての要素に#to_iメソッドを適用した結果(つまり文字列を整数に変換した結果)できあがるオブジェクトの配列を作ります.

もっと簡単な例で言えば,

ruby

1a = [1, 2, 3] 2b = a.map do |x| 3 x * 2 # 配列内のそれぞれの要素を2倍 4end 5 6puts a #=> [1, 2, 3] # 元の配列自体は変化しない 7puts b #=> [2, 4, 6] # a の要素が全て2倍された新しい配列ができる

という挙動になります.

投稿2016/07/08 10:21

tamy

総合スコア442

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

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

退会済みユーザー

退会済みユーザー

2016/07/08 23:55

回答ありがとうございます。 配列になるのですね。わかりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問