我有一个数组@filtered_reports
中的文件名列表。例如,文件名为'settlement_report_1.csv'
,其他各种名称的报告最多可达200+。没有前导零。使用array.max
时,当最大序列为'settlement_report_99.csv'
时,我会将'settlement_report_236.csv'
作为最大值。
在我达到三位数之前,它的效果很好:
@filtered_reports.max
返回99
而不是236
或任何其他高于99
的3位数。
如何从阵列中获取编号最大的报告,而不管数字的长度而不是最高的第一位?
答案 0 :(得分:5)
问题是您在字符串数组上使用#max
。 Ruby本身并不知道你正在尝试按字符串中的给定数字进行排序,因此它会以字母数字的形式对其进行排序。
Ruby需要知道将这些值作为整数进行比较。以下是一个应该有效的解决方案:
@filtered_reports.max { |a, b| a.slice(/\d+/).to_i <=> b.slice(/\d+/).to_i }