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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Ruby

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

Q&A

解決済

1回答

982閲覧

ruby hash.each.with_indexで一つのバリューに対してインデックスをカウントさせたい

rice_shower

総合スコア8

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Ruby

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

0グッド

0クリップ

投稿2020/01/28 12:43

編集2020/01/28 16:12

平素より大変お世話になっております。

前提・実現したいこと

hash.each.with_indexで一つのバリューに対してインデックスをカウントさせたい。
または違う手法でも下記のような結果が出るコードが知りたい。
スプレッドシートから情報を抜いて、@company_nameに代入
会社名は繰り返し処理で上から順に代入され、同じ会社名が連続することがある。

発生している問題・エラーメッセージ

0:株式会社a社 0:株式会社a社 0:株式会社a社 0:株式会社b社 0:株式会社b社 0:株式会社c社

上記の結果を下記のようにしたい

0:株式会社a社 1:株式会社a社 2:株式会社a社 0:株式会社b社 1:株式会社b社 0:株式会社c社

該当のソースコード

Ruby

1 sheet = @session.spreadsheet_by_key(@key).worksheet_by_title("hoge") 2 (1..sheet.num_rows).each do |row| 3 @company_name = sheet[row , 4] 4 @service_name = sheet[row, 5] 5 6 hash = {info: [@company_name,]} 7 hash[:info].each.with_index do |value, idx| 8 puts " #{idx}:#{value}" 9 end 10end

追記 単純化させましたが、以下のコードを叩いて
出力結果のIndex is 0, list is ["a", "b", "c", "d", "e", "f"]を
Index is 0, list is ["a"]
Index is 1, list is ["b"]
Index is 2, list is ["c"]
のような結果になる書き方を教えて頂きたいです。

Ruby

1list =["a","b","c","d","e","f"] 2hash = {names: [list]} 3hash[:names].each.with_index do |value, idx| 4 puts "Index is #{idx}, list is #{value}" 5end 6

補足情報(FW/ツールのバージョンなど)

ruby 2.5.3p105
宜しくお願い致します。

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

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

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

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

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

otn

2020/01/28 13:25

やりたいことがいまいち見えないので、そのまま実行すれば、上の結果が出るデータ付きのコードにしてください。
rice_shower

2020/01/28 14:45

申し訳ございません。上記はgoogle_apiを使用してスプレッドシートから情報を抜き出す性質上、jsonファイル、内部情報の記述等の理由からそのままコードを載せてもエラーになるので敢えて全文載せていません。 やりたいことを述べさせていただくならば、スプレッドシートから顧客情報を抜き出しメールにまとめて送信になります。 上記のコードはスプレッドシートを縦から順に読み込んでいき、該当する情報を抜き出しているコードになります。 上記のコードを組んでいて問題に上がったのが同一の会社に対して複数のメールを送ってしまう現象で、 発生している問題・エラーメッセージに記載している結果を返すことができれば一つの会社に対して情報をまとめて送信することができると判断しましたが、肝心のコードの書き方がわからずこちらに投稿した次第です。 長文また言葉からだと状況を読み解くのがひどく困難かと思われますが何卒宜しくお願い致します。
rice_shower

2020/01/28 21:09 編集

入力ミスです。
guest

回答1

0

ベストアンサー

申し訳ございません。上記はgoogle_apiを使用してスプレッドシートから情報を抜き出す性質上、jsonファイル、内部情報の記述等の理由からそのままコードを載せてもエラーになるので敢えて全文載せていません。

google-apiとかは質問と無関係なので、バッサリ削っていいです。

おそらく質問と関係するのは、下記だけなので、~~~ を埋めてください。

Ruby

1 hash = { ~~~~~~ } 2 hash[:info].each.with_index do |value, idx| 3 puts " #{idx}:#{value}" 4 end

その上で、その~~~~と対応する、期待する出力、実際の出力を書いてください。

投稿2020/01/28 14:52

otn

総合スコア84557

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

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

rice_shower

2020/01/28 21:09

h = Hash.new{|hash, key| hash[key] = []} sheet = @session.spreadsheet_by_key(@key).worksheet_by_title("hoge") (1..sheet.num_rows).each do |row| @company_name_get = sheet[row , 4] h[:company] << @company_name_get end 自己解決することができました、お手数おかけして申し訳ございません。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問