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

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

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

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

Q&A

解決済

2回答

842閲覧

メソッドに引数を入れたいのですが、うまく出来ません。

athuhiro

総合スコア15

Ruby

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

0グッド

0クリップ

投稿2019/06/01 20:32

編集2019/06/01 20:33

Rubyです。以下のクイックソートで、メソッドに引数を使いたいのですが、うまくいきません。どなたかRubyに詳しい方教えていただけると幸いです。

Ruby

1# クイックソート 2def quick_sort 3 4 return self if self.size < 2 5 6 7 pivot = self.shift 8 9 10 smallers = [] 11 biggers = [] 12 self.each do |num| 13 if num < pivot 14 smallers << num 15 else # num >= pivot 16 biggers << num 17 end 18 end 19 20 # smallersとbiggersをそれぞれソートして連結。 21 smallers.quick_sort + [pivot] + biggers.quick_sort 22 23end 24a = [9,8,7,46,5,14,3,2,91] 25p a.quick_sort

上記のコードでも動くのですが、def quick_sort(a)で配列aを引数に持ってきたいのですが、うまく出来ません。恐らくselfとの併用がうまくいっていないのではと思っています。Rubyに詳しい方ご指導いただけると幸いです。

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

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

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

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

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

otn

2019/06/02 01:15

どのように書き換えて、何が問題なのかを質問文に追記してください。
guest

回答2

0

ベストアンサー

意図は Arrayを拡張するのではなく、独立したmethodにしたい、ということでしょうか?
でしたら
def qsort(a)
でやるとして、

  1. self を全て a に変える
  2. 最後の行を

quick_sort(smallers) + [pivot] + quick_sort(biggers)
にする
3) 呼び出しを p quick_sort(a) にする

投稿2019/06/08 20:25

winterboum

総合スコア23329

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

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

0

オープンブラスについて勉強するとよいです。

  • まつもと直伝 プログラミングのオキテ 第21回 オープンクラスとRuby on Rails

https://tech.nikkeibp.co.jp/it/article/COLUMN/20080619/308756/

質問文にある ソートメソッドは、 Array クラスに そのメソッドを追加するものとして書かれています。
(呼び出し法が a.quick_sort となっていますから。

次のようにすると、質問文のコードは動作しました。

ruby

1# クイックソート 2class Array 3 def quick_sort 4 return self if self.size < 2 5 6 pivot = self.shift 7 8 smallers = [] 9 biggers = [] 10 self.each do |num| 11 if num < pivot 12 smallers << num 13 else # num >= pivot 14 biggers << num 15 end 16 end 17 18 # smallersとbiggersをそれぞれソートして連結。 19 smallers.quick_sort + [pivot] + biggers.quick_sort 20 end 21end 22 23a = [9, 8, 7, 46, 5, 14, 3, 2, 91] 24p a.quick_sort

投稿2019/06/01 22:12

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問