Ruby: Stringクラスのメソッド
REx - Ruby Examination で解いた問題の解説を自分なりにまとめ直すシリーズです。
問題
次のコードを実行するどどうなりますか
arr = [1,2].product([3,4]).transpose p arr
選択肢
[[1, 3], [1, 4], [2, 3], [2, 4]]
と表示される[[1, 3], [2, 4]]
と表示される[1, 2]
と表示される[[1, 1, 2, 2], [3, 4, 3, 4]]
と表示される
解答
正解は [4] です
解説
.product
- 配列からそれぞれ1つ要素を取り出し、新しい配列を作る
例: [1,2].product([3,4])
product | 3 | 4 |
---|---|---|
1 | [1, 3] | [1, 4] |
2 | [2, 3] | [2, 4] |
.transpose
- 行と列を入れ替えた配列を作る
- 一次元の配列に対しては、例外 TypeError が発生する
arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ].transpose p arr # => [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
参考: instance method Array#transpose (Ruby 2.1.0)
問題
次のコードを実行するとどうなりますか
a = "Ruby" b = " on Rails" a.concat b a.reverse p a.index("R", 1)
解答
正解は 8 です
解説
String#index(pattern, pos)
- 文字列のpos番目からpatternを検索し、最初に見つかった位置を返します
- 位置は左端が
0
で、1文字ずつ増えてく感じ
R | u | b | y | o | n | R | a | i | l | s | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
irbでの実行結果
irb(main):001:0> a = "Ruby" => "Ruby" irb(main):002:0> b = " on Rails" => " on Rails" irb(main):003:0> a.concat b => "Ruby on Rails" irb(main):004:0> a.reverse => "sliaR no ybuR" irb(main):005:0> a => "Ruby on Rails" irb(main):006:0> a.index("R", 1) => 8