Rubyの配列で使えるメソッド、二次元配列の使い方 配列の数、要素の長さ index.rb ary = ["aaaaa","aa","aaa"] p ary.length #=> 3 #配列の要素数 p ary[0].length #=> 5 #配列の一番目にある文字の長さ var googletag = googletag || {}; $c_{H,1}c_{H,2}...c_{H,W}$, $H \quad W$ var pbjs=pbjs||{}; googletag.cmd.push(function() { // fixed01のWORKSが不定期なため共通処理とする radish googletag.defineSlot('/21812778492/blog_300x250_common_fixed01', [[300, 250], [336, 280]], 'div-gpt-ad-1559710191960-0').addService(googletag.pubads()); 【Ruby入門】nilのポイントまとめ(nil? $H \quad W$ 【Ruby入門】ifやif elseの基本からANDやORを使う応用まで完全解説!! この前はオセロの盤の状態格納で2次元配列が必要だった。で、テトリス作ろう*1としたらやっぱり2次元配列が必要。というわけで、もう一度、Rubyで多次元配列を実現するためにはどうすればいいのか調べてみた。 まずは、前回やった、配列を宣言してさらにその中に配列を宣言する方法。 googletag.enableServices(); googletag.defineSlot('/21812778492/blog_728x90_common_eyecatch01_adsence', [728, 90], 'div-gpt-ad-1566564252373-0').addService(googletag.pubads()); $c_{2,1}c_{2,2}...c_{2,W}$ blank? 【Ruby on Railsアプリ開発】Mechanizeでスクレイピングする方法. googletag.defineSlot('/21812778492/blog_300x250_common_fixed02_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198391774-0').addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.cmd = googletag.cmd || []; googletag.defineSlot('/21812778492/blog_300x250_common_sidemiddle01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198726712-0').addService(googletag.pubads()); 侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。, 「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。, システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部として、これまでに200記事以上の記事を執筆。 将来的には海外で生活したいです。. present?) Rubyには多次元配列やハッシュを1次元配列にするためのflattenメソッドがあります。 結合された多次元配列を1次元配列にしたい ハッシュを1次元配列にしたい そのような方に向けて、この記事ではflattenメソッドについて以下の内容を解説していきます。 Qiita Jobsで転職すると、お祝い金30万円がもらえるキャンペーンを実施中!, you can read useful information later efficiently. pbjs.setConfig({bidderTimeout:2000}); googletag.pubads().enableSingleRequest(); 今日は多次元配列の中身を each_with_index のブロック変数に展開する方法を紹介します。 [ ["a", [1,2,3]], ["b", [4,5,6]] ] を each_with_index で実行した時に、 "a" という String と [1,2,3] という配列、0 というインデックス..という形で取得したいとします。 $a_{1,1} \quad a_{1,2} \quad ... \quad a_{1,W}$ googletag.defineSlot('/21812778492/blog_728x90_common_overlay_adsence', [728, 90], 'div-gpt-ad-1583302554779-0').addService(googletag.pubads()); googletag.defineSlot('/21812778492/blog_300x250_common_ctc02_adsence', [300, 250], 'div-gpt-ad-1566564559478-0').addService(googletag.pubads()); pbjs.que=pbjs.que||[]; Rubyで配列をある要素数ごとに分割するならArray#each_sliceを使おう タグ: ruby / 公開: 2014-07-01 Rubyで配列をある要素数ごとに分割する場合は Enumerable#each_slice が利用できる。 $a_{H,1} \quad a_{H,2} \quad ... \quad a_{H,W}$, a[i][j] のようにアクセスしたとき、i が a.size 以上であると a[i] が nil を返し、そのまま [j] でアクセスしてエラーを起こします。, 対処法として、i の大きさを確認するか、a[i] が nil でないことを確認しましょう。, 注意1では触れませんでしたが、Ruby では 配列のインデックスに負数を指定することができます。, これは便利なときと不便なときがあって、地図が上下左右でつながっている(ドラクエみたいな)問題では便利ですが、そうでないときは不便です。, 不要なときは i の大きさを確認しましょう。a[i] が nil であるとは限らなくなるので、 nil チェックは使えません。. $c_{1,1}c_{1,2}...c_{1,W}$ }); Rubyには便利なメソッドがたくさん用意されていますが、eachメソッドは配列やオブジェクトを要素分繰り返したいときに非常に便利なメソッドです。, ここでは、エンジニアとしてさまざまな言語を渡り歩いてきた著者がRubyのeachメソッドについて、基本的な使い方を3つのパターンに分けてご紹介します。Ruby初学者でも十分参考になると思いますのでぜひ参考にしてください。, eachメソッドは、主に配列の要素分の処理を繰り返し行いたい場合に使用するメソッドです。配列を指定してeachメソッドを実行すると、配列のインデックス番号0から順番に繰り返し処理が実行されます。, 配列についてよく理解していない方は以下の記事に詳しく解説していますので、合わせて参考にしてください。 Help us understand the problem. メーリングリストの中からこんなやり方があるってのを発見。, 1つ目はちょっと大掛かりなので、今回はパス。[]メソッドも再定義することができることは覚えておこう。, うーん・・・。(0..4)って表記が慣れない。けど、1番しっくりきそう。と思ったら、こう書けるじゃん。, 3つ目のnarrayライブラリは数値計算で多次元配列を使う定番だそうです。なので、今回はパス。, 問題の4つ目。これはHashを使って擬似的に配列を表現する。 googletag.defineSlot('/21812778492/blog_300x250_common_ctc01_adsence', [300, 250], 'div-gpt-ad-1566564396953-0').addService(googletag.pubads()); empty? googletag.defineSlot('/21812778492/blog_300x250_common_sidemiddle02_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198822157-0').addService(googletag.pubads()); var googletag = googletag || {}; でも、Arrayとは違うアルゴリズムだから検索速度とかに差が出るような気がする。なんとなく、Hashって要素数が膨大になってもアクセス時間が均等っていうイメージがあるんだけど。 What is going on with this article? ). googletag.defineSlot('/21812778492/blog_468x60_common_eyecatch02_adsence', [728, 90], 'div-gpt-ad-1567575393317-0').addService(googletag.pubads()); carrot googletag.pubads().collapseEmptyDivs(); googletag.defineSlot('/21812778492/blog_300x600_common_sidemiddle01_adsense', [300, 600], 'div-gpt-ad-1571293897778-0').addService(googletag.pubads()); $a_{2,1} \quad a_{2,2} \quad ... \quad a_{2,W}$ letus, このeachのzipメソッドで複数の配列を同時に回すやり方はRails開発でももちろんいきてきます。, ぼくは必要に駆られて、あるウェブサイトから記事タイトルとURLを取り出して、さらにタイトルにリンクをつける、というRailsアプリを作ろうとしていました。, 前回作成した「Railsのスクレイピングアプリ」ではタイトルだけスクレイピングしてきましたが、今回はそいつにaタグをつけてリンクまで付与しようとしたわけです。, ってことで、前回のスクレイピングアプリ(https://freesworder.netからタイトルを取得するアプリ)を改変して、タイトルにリンクをつけていきます。, まずは前回のスクレイピングアプリのtop_cotnroller.rbを次のように編集。, ここではページURLを格納するための@urlsというインスタンス変数を新たに定義しています。, searchメソッドで「クラス名がentry-titleで、その中にあるaタグ」の情報を取得して代入します。, 続いて、記事タイトルとリンク先を表示するためのビューファイル(home.html.erb)を次のように編集します。, zipメソッドを使うことで、@elementsと@urlsという2つの配列を同じループで同時に取り出すことができているので、記事タイトルとそれに対応するリンクを同時に使用しています。, また、@urlsに代入した「クラス名がentry-titleで、その中にあるaタグ」の情報から「属性値hrefの情報」をget_attribution(:href)で取り出して、リンクのhref属性値に指定しています。, とまあこんな感じで、eachの繰り返しを複数の配列で同時進行できるzipメソッドはRails開発でも便利なので使ってみてくださいね。, ネット広告代理店に1年3ヶ月勤め上げ、独立をして丸4年が経ちました。今年でフリーランス 5年目。, 音声入力の使い方から文章を書くコツまで完全網羅。ブログを書きたいすべての人向けの電子書籍, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。. 更新日 : 2018年9月4日, ここでは実際に簡単なプログラムを作成してeachメソッドの動作を確認してみましょう!, 以下のサンプルプログラムでは、配列fruitsに対して要素を1つずつ取得して出力させています。, このように配列の要素を1つずつ取得することができましたね!eachメソッドは「each do |変数|」で指定した変数に配列の要素を順番に格納されます。そのため、eachメソッドの繰り返し処理では格納された配列の要素の値を順番に参照することができます。, eachメソッドは範囲を指定して、指定した範囲分繰り返し処理を行うことも可能です。, キーと値を定義できるHash(ハッシュ)クラスでもeachメソッドを使用することができます。ハッシュでeachメソッドを実行すると、キーと値を順番にブロックで指定した変数に代入されて繰り返し処理が実行されます。, 以下のサンプルプログラムでは、ハッシュで定義したfruitsオブジェクトに対してeachメソッドを使用して、キーと値を順番に取り出しています。, このようにeachを使用すれば、ハッシュの要素も簡単に取得できることがわかりますね!, そんなeachメソッドのさまざまな操作方法については、以下の記事でまとめていますので、ぜひ参考にしてください。 スポンサーリンク googletag.defineSlot('/21812778492/blog_300x250_common_sidemiddle01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198726712-0').addService(googletag.pubads()); ©Copyright2020 FREE SWORDER.All Rights Reserved. Rubyのeachメソッドで複数の配列を回したいんだけど! どうも、Linです。海鮮丼、仕入れました。 「Rubyで配列に入ってる変数を取り出して使いたい・・・!」 そんな時もたまにあるでしょう。 この時に便利なのがRubyのeachメソッドです。 Ruby on Railsアプリでスクレイピングする方法を忘れないうちにどうも、Linです。アイスに移行してます。 「Ruby on Railsで他のウェブサイトからの情報を掲載できるアプリを作りたい」そんな時におすすめなのが、スクレイピングという技です。 スクレイピ... 発送前に確認しよう!ソフトバンク光のルーター(光BBユニット)の返却方法と3つの注意点, Adobe月額費用高すぎない?Creative Cloudのサブスクリプション料金を節約する方法. googletag.defineSlot('/21812778492/blog_300x250_common_fixed01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565194485392-0').addService(googletag.pubads()); googletag.defineSlot('/21812778492/blog_300x250_common_sidetop01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565330658303-0').addService(googletag.pubads()); 【Ruby入門】nilのポイントまとめ(nil? googletag.defineSlot('/21812778492/blog_300x250_common_fixed01', [[300, 250], [336, 280]], 'div-gpt-ad-1559710191960-0').addService(googletag.pubads()); pbjs.setConfig({bidderTimeout:2000}); googletag.defineSlot('/21812778492/blog_300x250_common_fixed02_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565198391774-0').addService(googletag.pubads()); googletag.defineSlot('/21812778492/blog_300x250_common_fixed01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565194485392-0').addService(googletag.pubads()); googletag.cmd = googletag.cmd || []; コードはこんな感じ。, 1行目の宣言が必要なのがちょっとうざい。要素にアクセスするための二重のカッコもうざい。 googletag.defineSlot('/21812778492/blog_728x90_common_eyecatch01_adsence', [728, 90], 'div-gpt-ad-1566564252373-0').addService(googletag.pubads()); (adsbygoogle = window.adsbygoogle || []).push({}); このとき、fruitsの配列の中身を順番に表示させたいときは次のようなコードを書けばいいのですね。, 配列型のインスタンス変数から順番に変数を取り出してビューファイルに表示させるときなんかに活躍しますね。, この配列から同時に野菜とフルーツの情報を取り出して、同時に表示させたいときは次のようなコードを書いていきますよ。, apple 【Ruby入門ガイド】アプリ開発で知っておくべき知識を総ざらい empty? 更新日 : 2019年4月12日, と感じている方は以下の記事も合わせてご覧ください。Rubyの基礎の基礎から勉強法などを体系的にまとめていますので、きっと参考になるのではと思います。 侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。, 「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。, 経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど, 言語が好きで、英語や中国、ドイツ語を勉強しました。 Rubyで二次元配列を初期化するときは注意が必要です。 ・3x3の2次元配列を作るときのよくある間違い a = Array.new(3, Array.new(3, 0)) これで配列の初期化が出来たと思うのですが、実は出来ていません。実際に配列の状態を変更してみると明らかになります。 a = Array.new(3, … 更新日 : 2020年6月18日, ここではeachメソッドについて、概要から基本的な使い方についてわかりやすく解説しました。, eachメソッドは配列や範囲オブジェクト、ハッシュなどの要素に同じ処理を繰り返し実施したい場合に非常に便利ですので、使い方はしっかりと理解しておきましょう。もし、eachの使い方を忘れてしまったら、この記事を思い出してくださいね。, 当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。 // fixed01のWORKSが不定期なため共通処理とする googletag.defineSlot('/21812778492/blog_728x90_common_overlay_adsence', [728, 90], 'div-gpt-ad-1583302554779-0').addService(googletag.pubads()); googletag.pubads().setTargeting('blog_type', 'Tech'); $:$ 更新日 : 2020年3月10日, また、compactメソッドはnilと消し去るために使用するので、こちらのnilの記事でまとめてあります。 googletag.defineSlot('/21812778492/blog_300x250_common_sidetop01_adsense', [[300, 250], [336, 280]], 'div-gpt-ad-1565330658303-0').addService(googletag.pubads()); grape こちらは、selectメソッドと全く同じメソッドです。, これまで、この記事を読んできた方であれば、selectメソッドと同じであるということがわかるはずです。, selectは単に条件によって、要素の絞り込みを行うだけですが、mapは要素に変更を加えて新たな配列を返します。, このように、selectはただ3よりも大きな数を返しますが、mapはif文などで条件を絞り込んだ後に各要素に変更を加えることができます。, また、ifを使った場合条件に一致しない箇所にはnilが入るので、compactメソッドでnilを除いた結果を返しています。, if文の基本的な使い方はこちらで紹介しているので理解が浅いと感じている方は一読することをお勧めします。 googletag.defineSlot('/21812778492/blog_300x250_common_ctc02_adsence', [300, 250], 'div-gpt-ad-1566564559478-0').addService(googletag.pubads()); googletag.defineSlot('/21812778492/blog_300x250_common_ctc01_adsence', [300, 250], 'div-gpt-ad-1566564396953-0').addService(googletag.pubads()); 更新日 : 2019年5月17日, selectメソッドは、配列を操作するメソッドの中でも特に利用頻度の高いメソッドです。, 条件を指定して簡単に配列やハッシュの要素を絞り込むことができるので、ぜひ使いこなしてみてください。, また、selectメソッドだけがすべてではなく状況に応じて、適切なメソッドを使用していくことが大切です。, 当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。 By following users and tags, you can catch up information on technical fields that you are interested in as a whole, By "stocking" the articles you like, you can search right away. 【Ruby eachの応用編】さまざまな使い方を網羅的に理解しよう Rubyで入れ子のhashを初期化するときには、最初に階層を決めておかないと undefined method `[]' for nil:NilClass (NoMethodError) みたいなエラーになったりします。 なので、階層ごとの初期化の方法をまとめてみました。 }); そのような方に向けて、この記事では条件に一致した要素を取得できるselectメソッドについて、以下の内容を解説していきます!, selectメソッドの基礎から応用までわかりやすく解説していますので、selectメソッドをぜひマスターしましょう!, 「{}」で囲ったブロックの変数に要素を一つずつ格納しながら、ブロックの処理が真になったときの要素を取得していきます。, selectメソッドは、先述したように条件にマッチした要素を返した配列を作るメソッドです。, このように、1番目では3以上、2番目は3と完全に一致したもの、3番目は3以下という条件を満たしたものを返しています。, このように、selectメソッドを使えば条件を指定して、配列から条件で絞った新しい配列を作成できます。, 先ほどのselectメソッドではレシーバー(元の配列)は変更されませんでしたが、select!メソッドは元の配列に変更を加えます。, このように、元の配列は[1,2,3,4,5]でしたが、select!メソッドで返った結果に変更されています。, each_with_indexメソッドを使用することでブロックに配列のインデックスも同時に渡すことができます。, そして、そのindexの値をselectの条件として使用することで、条件を満たした要素とインデックスの値が多次元の配列として返されます。, また、each_with_indexメソッドの使い方はこちらの記事でも触れられているので、ぜひ一読してみてください。, include?は配列に指定の要素が含まれているかどうかを判定するためのメソッドです。, このようにinclude?を使うと、その文字列を含んでいるかどうかで新しい配列を作成できます。, 今回は"ect"を含むもの、"ght"を含むものという条件でselectを使用してみました。, 今回は「A」という先頭の要素を意味する正規表現を使って、先頭がrで始まる文字列に絞り込んでみました。, なので、今回の配列の中で唯一先頭が「r」で始まる、「right」だけが配列として返されました。, 指定する条件は自由ですので、ぜひここであげた例以外の条件指定を自分で考えてみてください。, また、正規表現は初心者を苦しめるトピックの一つですので、もしも理解が浅いと感じた方はこちらの記事を一読することをおすすめします。, select内では、RubyのAND演算子やOR演算子をそのまま使うことができます。, ANDはどちらの条件も満たす必要があり、ORはどちらの条件でもいいので、ANDの条件で絞った場合のほうが大抵は要素の少ない配列を返します。, 条件を扱う際にはANDとORをよく使うので、いざというとき使えるようにしておきましょう。, ANDとORを使った条件指定の例はif文の解説でもしていますので、ぜひ一読してみてください。, このように、hashでも配列と同じように、マッチした要素を抽出できていることがわかります。, selectでは条件に一致するすべての要素を出力しましたが、findメソッドは条件に一致した始めの要素を一つだけを返します。, rubyにはselectメソッドの他に、find_allメソッドもあります。 Why not register and get more from Qiita? 大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。プログラミング初学者に向けてわかりやすく、ためになるコンテンツ作りを心がけています。, 配列を取得するときにインデックス番号も扱いたい場合はeach_with_index, ブロックに値を渡して新たな配列を作成したい場合はeach_with_object. 【Ruby入門】ifやif elseの基本からANDやORを使う応用まで完全解説!! 【Rubyの配列】基礎から発展までを網羅しました! googletag.defineSlot('/21812778492/blog_728x90_common_overlay', [728, 90], 'div-gpt-ad-1584694002281-0').addService(googletag.pubads()); googletag.cmd.push(function() { googletag.defineSlot('/21812778492/blog_728x90_common_overlay', [728, 90], 'div-gpt-ad-1584694002281-0').addService(googletag.pubads());