Rubyの文字列と配列の最大化問題の考察
2022-01-31 23:15:31
maxメソッド
b=[1,3,55,777,2,4,6,8,0]
数値データの場合、max は配列の最大値、min は配列の最小値を取得します。
b.max => 777
b.min => 0
文字列型配列の場合、サイズの比較はあまり意味がないのですが
rubyで示された例は
# enum.max -> obj
# enum.max { |a, b| block } -> obj
#a = %w(albatross dog horse)
#a.max = > "horse"
# a.max { |a, b| a.length <=> b.length } #=> "albatross"
実践実験
d=%w(albatross dog horse ddd dasgfds)
d.max => "horse"
ちょっと変、どうしたんだろう
これをより視覚的にわかりやすい数字の羅列で印刷
a = ["1", "3", "55", "777", "2", "4", "6", "8", "0" ;]
def max(first,*rest)
max=first
rest.each do |x|
p "---#{x}--#{max}"
max=x if x>max
p "---#{x}--#{max}"
max
end
実行
コピーコード
コードは以下の通りです。
a.max
その結果は
"---3--1"
"---3--3"
"---55--3"
""---55--55"
""---777--55"
""---777--777"
""----2---777"
""----2---777"
""---4---777"
""---4---777"
""---6----777"
""---6---777"
""---8---777"
""---8---8"
""---0--8"
""---0---8"
=> "8"
問題発生, "8" > "777" => 真, 再試行
"7" > "777" => false
"6" > "777" => false
"9" > "777" => true
"10" > "777" => false
"11" > "777" => false
"70" > "777" => false
"80" > "777" => true
そろそろクラッシュする、法律が不親切だ、なぜならmaxでサイズを比較する方法は、以前は彼がASCIIでサイズを判断していると思っていた、今日ソートの問題を読んでこれを知った、実は辞書ソートで最大値を取っているのだ。
ここで、Rubyのsortをざっと見てみましょう。
ソートメソッド
ary.sort -> new_ary
ary.sort { |a, b| block } -> new_ary
enum.sort_by { |obj| block } -> array
enum.sort_by -> an_enumerator
インスタンス
h=['1','3','13','10','7']
A. p h.sort
B. p h.sort{|a,b| a.to_i <=> b.to_i}
C. p h.sort_by{|x| x.to_i}
出力は次のようになります。
A. ["1", "10", "13", "3", "7"]
B. ["1", "3", "7", "10", "13"]
C. ["1", "3", "7", "10", "13"]
1. ブロックが指定されていない場合、デフォルトで辞書順にソートされます。
2. ブロックが指定されている場合、ブロックの定式化法における値の大きさでソートされます。
3. sort_byメソッドは、ブロックのコードを実行して生成された結果でソートするため、1要素につき1回のブロック呼び出ししか行わず、Bよりも効率的である。
関連
-
redisクラスタ構築のチュートリアルと発生した問題
-
Ruby on rails install to remove DL is deprecated, please use Fiddle warning message method [test available].
-
バブルソートアルゴリズムの簡易実装とRuby版
-
アプレットを置き換えるHTMLスクリプトを記述するRubyの例
-
Jekyll静的ウェブサイトのバックエンドエンジンのチュートリアル
-
Ruby on Railsのメーラーの使い方を説明します。
-
Ruby on Railsのルーティング設定に関するいくつかのアドバイス
-
Rubyでコレクションを書くためのガイド
-
Ruby WebDriverガイド
-
Rubyプログラミングにおけるネーミングスタイルガイド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Ruby on Rails ラックミドルウェア基礎学習チュートリアル
-
モンキーパッチのプログラミングスタイルとRubyでの利用について
-
MongoDBに接続するためのRuby on Railsフレームワークアプリケーション チュートリアル
-
Rubyのデザインパターン。プログラミングにおけるシングルトンパターンの活用
-
デザインパターンのうち、ProxyパターンとDecorativeパターンを使ったRubyのコード例
-
Rubyの4つの比較関数(equal?, eql?, ==, ===)について解説します。
-
Ruby on Railsのパフォーマンスを最適化するためのいくつかの方法についての考察
-
Ruby on Railsのインストールに関する簡潔で迅速なガイド
-
Rubyでの正規表現の使い方基本ガイド
-
Rubyにおける継承とメッセージング