機能 ショートカットキー
リファレンス(参考URL)一覧へ移動 R
記事URLをMarkDownとしてコピー Ctrl+M
前のコードタグへ移動 Ctrl+←
次のコードタグへ移動 Ctrl+→
ヘルプを表示・非表示 H
Tips
- ショートカットキーは記事上で有効です。ヘッダー/フッター付近では機能しないことがあります。
- コードタグ移動機能がうまく動かないときは、Shift+F5でページを更新してみてください。
- このウィンドウを閉じるには、Hキーをもう一度押してください

Rubyのeachメソッドで複数のオブジェクトを同時進行でeachしたいときはzipメソッドを使おう

プログラミング

Rubyで、複数の配列から同時進行でeachしたいって時には、.zipが使えます。


fruits = ['apple','banana', 'grape', 'orange'] vegetables = ['carrot','radish', 'leaf', 'letus'] pg = ['hoge','fuga', 'foo', 'bar'] fruits.zip(vegetables).each {|fruit , vegetable| # print(fruit) # print(vegetable) } // 3つ以上ある場合はこういうやり方が便利。 fruits.zip(vegetables, pg).each {|fruit , vegetable , pg| puts(fruit) puts(vegetable) puts(pg) } __END__ #=> apple carrot hoge banana radish fuga grape leaf foo orange letus bar

例えば、「Xpathスクレイピングしたのを、同時にeachで回してCSV形式にしたいなぁ…」と思ったら、

こうやってしまうと、変なことになります。

p html.xpath('//*[@class="promotion"]/div[1]/div[1]/h5[1]').each{|i|
  html.xpath('//*[@class="promotion"]/div[1]/div[1]/h5[2]').each{|l|
    puts i.text + ',' + l.text
  }
}

今回紹介したzipメソッドを使って、こう書くのが正解です。

p html.xpath('//*[@class="promotion"]/div[1]/div[1]/h5[1]').zip(html.xpath('//*[@class="promotion"]/div[1]/div[1]/h5[2]')).each{|c_name, p_name|
    puts c_name.text + ',' + p_name.text
}

この記事で欲しい情報が見つからなかった方へ

この記事の更新情報がある場合があります。
この記事は以下の記事とも関連性があると思われます。

Ruby windowsのソフトウェアを外部コマンドから開く・起動する
Ruby sinatra 使い方
Ruby hash キーが重複していた場合は2つの値を加算する
Ruby jrubyをインストールしてからGEMのパスが変わってしまった場合の対処
Rubyでhashや配列をeach_with_indexで最初と最後の処理だけ特別な処理をする
Rubyで配列の集合演算
Rubyでmechanizeでブログをキーワード検索して最初の投稿を取得する


管理人の方針で、既存の記事の編集はせず、新しい情報や大きな既存情報の更新があった場合には、新しい記事として公開することになっています。
当記事で欲しい情報が見つからなかった・解決に至らなかった場合、これらのリンクがお役に立てるかも知れません。

どうやってこの関連記事を生成しているの?
この機能のPHPソースコード(2500行)

コメントを残す

Close Menu