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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

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

Q&A

解決済

3回答

2595閲覧

Ruby 標準入力から二次元配列を作る方法

moshimoshi

総合スコア10

Ruby

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

1グッド

0クリップ

投稿2017/06/07 09:30

###実現したいこと
4 10 3
2 1.2 2 0.4
255 423 56 9988
266 432 50 6542

こういった標準入力がある場合にこれを
[[4,10,3],[2,1.2,2.0.4],[255.423.56.9988],[266,432,50,6542]]
という二次元配列にしたい。
また、開始の行数を選択してそこから二次元配列を作成ということは可能ですか?
(3行目から作成で[[255.423.56.9988],[266,432,50,6542]]のような感じ)

実現方法を知っている方ご教示お願いします。

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答3

0

Ruby

1all = STDIN.readlines.map{|line| line.split(" ").map(&:to_i)} 2 3p all 4 5from3 = all[2..-1] 6 7p from3

readlinesで1行1要素からなる配列にします。
その配列の各要素をsplitで空白文字で区切って配列化し、さらにその各要素を整数化したものと置き換えます。

注:split(" ")は単に空白で区切るという意味じゃ無いです。strip.split(/\s/)とほぼ同じ。
詳しくはString#splitのリファレンスを参照。

投稿2017/06/07 12:23

otn

総合スコア84538

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

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

moshimoshi

2017/06/11 09:24 編集

分かりやすくありがとうございます。
guest

0

入力データを csv (空白をセパレータとする) とみなして処理してみました。

c.rb

ruby

1require 'csv' 2 3csv = CSV($stdin, col_sep: ' ', headers: false) 4p csv.map {|row| row.map {|d| d.to_f} } 5

実行例:
イメージ説明

投稿2017/06/07 21:53

katoy

総合スコア22324

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

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

退会済みユーザー

退会済みユーザー

2017/06/07 23:38

勉強になります。
moshimoshi

2017/06/11 09:48 編集

回答ありがとうございます。
guest

0

ベストアンサー

Ruby

1# encoding: utf-8 2 3array = [] 4 5loop do 6 input = gets.chomp 7 break if input.empty? 8 array << input.split("\s") 9end 10 11p array

考えてみました。

他の方法

Ruby

1# encoding: utf-8 2 3array = [] 4array << gets.chomp.split("\s") until STDIN.eof 5p array

参考にしたページ
while修飾子/until修飾子/while文/until文 ― ちょっと便利な繰り返し処理の構文とは?(1)

表示する範囲を指定する場合

Ruby

1# encoding: utf-8 2 3array = [] 4 5loop do 6 input = gets.chomp 7 break if input.empty? 8 array << input.split("\s") 9end 10 11p array.drop(gets.to_i - 1)

実行結果例

4 10 3 2 1.2 2 0.4 255 423 56 9988 266 432 50 6542 3 [["255", "423", "56", "9988"], ["266", "432", "50", "6542"]]

otn様とkatoy様の方法を参考にさせていただきました。

Ruby

1# encoding: utf-8 2 3p $stdin.map { |e| e.split(' ') }.drop(ARGV[0].to_i - 1) 4

投稿2017/06/07 10:52

編集2017/06/08 00:02
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

moshimoshi

2017/06/07 11:36

分かりやすく、助かりました。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2017/06/07 11:43

いえいえ。どういたしまして。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問