2016-03-28 14 views
-1

ファイル名のリストが配列@filtered_reportsにあります。たとえば、ファイル名は'settlement_report_1.csv'で、他のさまざまな名前が最大200+まで報告されます。先行ゼロはありません。 array.maxを使用した場合、最大の連続が'settlement_report_236.csv'の場合、最大値として'settlement_report_99.csv'が得られます。数字を含む文字列の最大数

私は3桁を打つ前に、それは次のようにうまく働いた:

@filtered_reports.max 

代わり23699または99よりも高いです他3+桁の番号を返します。

最初の数字の数字の長さではなく、数字の長さに関係なく、配列から最大の番号付きレポートを取得するにはどうすればよいですか?

答えて

5

問題は、文字列の配列に#maxを使用していることです。 Rubyは本質的に、あなたがその文字列内の与えられた数字でソートしようとしていることを知らないので、英数字でソートします。

これらの値を整数として比較するには、Rubyが知っておく必要があります。ここでは動作するはずですそのような解決策は以下のとおりです。

@filtered_reports.max { |a, b| a.slice(/\d+/).to_i <=> b.slice(/\d+/).to_i }

+5

'max'は(あまりにも、と読みやすく)高速であるのではなく' max_by': '.max_by {| X | x [/ \ d + /]。to_i} ' – Amadan

関連する問題