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

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

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

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

Q&A

解決済

1回答

2495閲覧

Ruby 配列の要素を昇順=降順で表示させたい

shirou

総合スコア15

Ruby

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

0グッド

0クリップ

投稿2018/07/15 05:26

前提・実現したいこと

A-Zまでのアルファベットを入れた配列を
A=Z
B=Y
のように並び替えるコードをreverse_eachを使って作成

エラー内容

A=Z B=Z C=Z D=Z E=Z F=Z G=Z H=Z I=Z J=Z K=Z L=Z M=Z N=Z O=Z P=Z Q=Z R=Z S=Z T=Z U=Z V=Z W=Z X=Z Y=Z Z=Z

問題を起こすコード

ruby

1letters = %w[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] 2letters.reverse_each do |n| 3 letters.each do |y| 4 puts "#{y}=#{n}" 5end 6end

###reverse_eachを用いないコード(問題なく動作)

ruby

1letters = %w[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] 2(0..25).each do |n| 3 puts "#{letters[n]} = #{letters [-n-1]}" 4end

試したこと

eachループにeachループを重ねているので当然の結果だとは理解しています。
reverse_eachを用いないコードの方では、配列の順番をループさせて数字を抽出した(変数n)上で、letters配列の該当要素を抽出しているので問題なく動くのですが
letters.reverse_eachを用いた場合では、配列の要素そのものを抽出してしまう為
A=Zにおける右辺は出力できますが、reverse_each内の変数において左辺のAを表現する方法がわかりません。
A-Zを順番に出力させるコードを記述すればいいのでしょうが、eachメソッドで出力する方法しか知らない為に
エラー内容の結果へとなっています。

問題コードをどのように書き換えればreverse_eachメソッドを使用した時でも、問題を起こさないコードと同じ出力結果が得られるでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

letters に、 lettersを逆順にした配列を組み合わせるということで、reverse_each を使うという着想はよいと思いますが、ここは単に reverse で逆順の配列を作り、元のletterszipを使って組み合わせるということで、

ruby

1letters = %w[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z] 2 3letters.zip(letters.reverse) do |e| 4 puts e.join('=') 5end

でいかがでしょう?

参考になれば幸いです。


補足

本題と関係ない補足ですが、

ruby

1letters = %w[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]

は以下のようにも書けます。

ruby

1letters = ('A'..'Z').to_a

投稿2018/07/15 05:46

編集2018/07/16 01:12
jun68ykt

総合スコア9058

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

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

shirou

2018/07/15 06:01

迅速な回答ありがとうございます! 二次元配列に直した上で、各々の配列[0][0]を一つの変数で拾えて結合出来てしまうとは・・! zip/join共に学習不足の為、内容理解に少し時間が掛かりましたが、頂いたコードがとてもシンプルかつ求めていた回答でしたのでベストアンサーとさせていただきます!
jun68ykt

2018/07/15 06:05

お役にたてたようで、よかったです!
shirou

2018/07/15 06:09 編集

p e で確認したところ["A","Z]が返って来たので、各々の配列[0][0]ではなく[0]に既に纏まっていたのですね。 目から鱗でした! 補足内容までありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問