2016-03-28 121 views
-1

我有一個數組中的文件名列表@filtered_reports。例如,文件名是'settlement_report_1.csv',其他各種名稱一直報到200+。沒有前導零。當使用array.max時,當最大順序爲'settlement_report_236.csv'時,我得到'settlement_report_99.csv'作爲最大值。包含數字的字符串數組中的最大數字

之前我打了三位數,它好工作是這樣的:

@filtered_reports.max 

返回99而不是236或比99更高的任何其他3+位數。

不管數字的長度而不是最高的第一位數字,我如何從數組中獲取最大編號的報表?

回答

5

問題是,你正在對字符串數組使用#max。 Ruby本質上並不知道你試圖按照字符串中給定的數字進行排序,所以它會按照字母數字排序。

Ruby需要知道將這些值作爲整數進行比較。這裏是一個這樣的解決方案,它應該工作:

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

+5

'max_by'而不是'max'更快(更易讀,太):'.max_by {| X | x [/ \ d + /]。to_i}' – Amadan