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

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

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

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

Q&A

解決済

6回答

1362閲覧

rubyで配列を先頭から順に消したいのですが

Ohiirechan

総合スコア24

Ruby

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

0グッド

0クリップ

投稿2017/03/02 23:19

配列の先頭から順に表示した後消すという作業をしたいです。
nums = [0, 1, 2, 3]
という配列を
0, 1, 2, 3
という風に表示したあと、nums を空にしたいです。

ruby

1nums = [0, 1, 2, 3] 2count = 0 3 4loop do 5 puts nums[count] 6 nums.shift 7 break if nums.empty? 8 count += 1 9end 10 11#=> 0, 2

上のコードを入力すると出力が 0, 2 になってしまいます。0 1 2 3を表示したいのですが教えてください。

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

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

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

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

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

guest

回答6

0

ベストアンサー

こんにちは

1回目のループで

loop do puts nums[count] // nums[0] => 0 nums.shift //配列の最初の要素を削除 => nums = [1, 2, 3] break if nums.empty? count += 1 //count = 1 end

2回目のループで

loop do puts nums[count] // nums[1] => 2 ( nums = [1, 2, 3]のため) nums.shift //配列の最初の要素を削除 => nums = [2, 3] break if nums.empty? count += 1 //count = 2 end

となります。

nums.shiftで配列の先頭を削除しているため
count += 1 は不要です。

投稿2017/03/03 00:19

sikarie

総合スコア17

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

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

Ohiirechan

2017/03/04 00:46

そうだったのですか! ありがとうございます。 ほかの皆さんも、さまざまな解放を提示していただきありがとうございました!
guest

0

こんにちは。

  • shiftの返り値は配列の先頭であった要素なので、これを出力に使う。

  • whileを使って、配列が空になったかどうかの判定をループ本体の前で行う。

上記の2点によって、以下となります。

ruby

1nums = [0, 1, 2, 3] 2 3while !nums.empty? do 4 puts nums.shift 5end 6 7# => 0 1 2 3

ご参考まで。

投稿2017/03/02 23:47

編集2017/03/03 00:08
jun68ykt

総合スコア9058

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

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

0

count += 1 がいりません。

投稿2017/03/02 23:45

Zuishin

総合スコア28656

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

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

0

a.rb

ruby

1nums = [0, 1, 2, 3] 2p nums.shift while !nums.empty? 3 4p nums

実行例

$ ruby a.rb 0 1 2 3 []

投稿2017/03/03 14:22

katoy

総合スコア22324

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

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

0

Ruby

1nums = [0, 1, 2, 3] 2loop{nums.empty?? break : puts(nums.shift)}

私も考えてみました。
loopで挟んで、puts(nums.shift)を繰り返しています。

実行結果例

0 1 2 3

投稿2017/03/03 13:42

編集2017/03/03 13:56
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

このような書き方でも出来ます

Ruby

1num = [0, 1, 2, 3] 2p num 3 # => [0, 1, 2, 3] 4 5 6(num.length).times do |n| 7 puts num.shift 8end 9 # => 0 1 2 3 10 11 12p num 13 # => []

投稿2017/03/03 00:06

KokiHirokawa

総合スコア48

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問