[Ruby]配列を使用する際に便利なメソッドのあれこれ
発想の選択肢を広げる組み込みメソッド
業務でコードを書くようになり、Ruby
の便利なメソッドが次々に出てくることに驚いている。
メソッドを覚えていないのでその都度毎回調べて適用できそうなものを使用していくことがしばらく続くと思われるのですが、覚えていないにしても選択肢としての自分の中の引き出しを作っておきたい。
引き出しがないと「〇〇したいから〇〇メソッドを使えばいいか、そのメソッドどうやって使うんだっけ」
という段階にすらいかないという危機感が生まれたので頻出そうなものをメモ程度に吐き出します。
きりがなさそうなので、とりあえず配列に関わりそうなものを。。
とりあげるメソッド
- sample
- values_at
- assoc
- compact
- uniq
- sort
- transpose
- zip
- sum
- flatten,flat_map
- Array
要素取得系
sampleメソッド
sampleメソッド
配列からランダムに1つの要素を取り出す。
テストケースで配列の中からランダムに一つ実行させたいときとか使えそうな気がする
[1, 2, 3, 4, 5 ,6].sample
#=> 5
[1, 2, 3, 4, 5 ,6].sample(3)
#=> [4, 6, 3]
values_atメソッド
配列から不連続の複数の値を取り出せる。
ary = ['Apple', 'Orange', 'Strawberry', 'Banana']
a, b, c = ary[0], ary[1], ary[4]
こうしてたのを次のようにできる。
ary.values_at(0, 3, 4) #=> ["Apple", "Banana", nil]
assocメソッド
特定のキーを持つ要素を返す。アソシエーション。
ハッシュにしておけば簡単に指定して取り出せる。
ary = [[:Apple, 100], [:Orange, 50], [:Strawberry, 200]]
ary.assoc(:Orange) #=> [:Orange, 50]
配列の整形
compactメソッド
nil
の要素を取り除いた配列を新しく生成。
どういうときに使うのかイマイチ例が浮かばないけど、
配列の中のnilいらん!ってなったらcompact
を使うと覚えておくことにする。
[1, nil, 'abc', false].compact #=> [1, "abc", false]
uniqメソッド
重複をなくすメソッド。
色んな角度から条件を満たしていくものを配列にバンバン格納していき、最後にuniq
をつけて重複を無くすといった使い方ができそう。便利。
[1, 1, 2, 2, 3, 4].uniq #=> [1, 2, 3, 4]
sortメソッド
順番を整えるメソッド
[5, 2, 6, 3, 1, 4].sort #=> [1, 2, 3, 4, 5, 6]
['a', 'd', 'b', 'c'].sort #=> ["a", "b", "c", "d"]
ハッシュ化
transposeメソッド
配列を行列に見立てて行と列の入れ替えを行う。
それぞれの配列番号がちゃんともう一方に対応したものであれば簡単にハッシュ化できる。
ary = [['Apple', 'Orange', 'Strawberry'],[100, 50, 200]]
ary.transpose #=> [["Apple", 100], ["Orange", 50], ["Strawberry", 200]]
ary.transpose.to_h #=> {"Apple"=>100, "Orange"=>50, "Strawberry"=>200}
zipメソッド
ハッシュ化でもとの配列が別々なら、zip
してしまえばいい。
product = ['Apple', 'Orange', 'Strawberry']
price = [100, 50, 200]
p product.zip(price) #=> [["Apple", 100], ["Orange", 50], ["Strawberry", 200]]
p product.zip(price).to_h #=> {"Apple"=>100, "Orange"=>50, "Strawberry"=>200}
その他便利そうなやつ
sum
数値だけでなく文字列もくっつけてくれる。
初期値を引数に与えることができる。
[1, 2, 3, 4].sum(5) #=> 15
['foo', 'bar'].sum('>>') #=> ">>foobar"
['foo', 'bar'].sum('') #=> "foobar"
配列の配列を連結することも可能とのこと。(この引数は初期値とは別かな??)
配列の平坦化。
[[1, 2], [3, 1, 5]].sum([]) #=> [1, 2, 3, 1, 5]
flattenメソッド
平坦化はこれが一般的。(可読性考えるとこっちのが楽)
入れ子になった配列を平坦にした新しい配列を返す。
[[1,2],[3,4]].flatten #=> [1, 2, 3, 4]
flat_map
っていうmap
の機能に平坦化をつけたメソッドもあるみたい。
ary = ['Dog is Animal', 'chicken is bird']
ary.map { |s| s.split(' ') } #=> [["Dog", "is", "Animal"], ["chicken", "is", "bird"]]
ary = ['Dog is Animal', 'chicken is bird']
ary.flat_map { |s| s.split(' ') } #=> ["Dog", "is", "Animal", "chicken", "is", "bird"]
Arrayメソッド
引数のオブジェクトがto_ary
メソッドまたはto_a
メソッドを持っていればその結果を、持っていなければオブジェクトを配列に入れて返す。
つまり
-
nil
なら空の配列を返す - 配列は配列のまま返す
- 数値や文字列であれば、それを要素とする配列を返す
Array(nil) #=> []
Array([1, 2, 3]) #=> [1, 2, 3]
Array(1) #=> [1]
Array('abc') #=> ["abc"]
引数に配列を渡したい!といったときにわざわざ条件分岐しなくてもArray
メソッドにつっこんでおけば、どんな形であろうと配列にしてくれるということか。便利。
まとめ
使い方やそのメソッドの挙動を確認することはよくしていたが、実際にそのメソッドがどんな場面に使われるかを想像することは今まであまりしてこなかった。
経験が足りないため、使用例がイメージできないことのほうが多いが、今後も実際に使うことをイメージしながら学習を進めていきたい。
Author And Source
この問題について([Ruby]配列を使用する際に便利なメソッドのあれこれ), 我々は、より多くの情報をここで見つけました https://qiita.com/Jwataru/items/923a11f9e97a84c7982f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .