如何在ruby中对文件名进行排序?

卢卡蒂斯

是的,它与Ruby是否存在natural_sort_by方法的副本相同,但我认为dawg和Eric在这里更清楚了,至少对我而言,这些答案更为详尽。

我有一个像这样的数组:

arr = ["file1.txt", "file11.txt", "file12.txt", "file2.txt", "file3.txt"]

我希望将其排序为:

arr = ["file1.txt", "file2.txt", "file3.txt", "file11.txt", "file12.txt"]

我怎样才能做到这一点?我尝试了sort,但对我来说还不太清楚。

我按大小将文件排序如下:

files=Dir.entries("./").sort { |f| File.size(f) }.select { |f| File.file?(f) }
w

Eric的答案是对仅文件名中的数字进行自然排序的好方法如果所有文件名都具有相同的前缀,则可以使用。

如果要添加第二个元素(例如,其中没有数字的文件名),则可以通过创建列表来实现多元素sort_:

filenames = ["file1.txt", "file11.txt", "file12.txt", "file2.txt", "file3.txt","file.txt", "File.txt"]
filenames.sort_by{ |name| [name[/\d+/].to_i, name] }
=> ["File.txt", "file.txt", "file1.txt", "file2.txt", "file3.txt", "file11.txt", "file12.txt"]

工具的两个元素sort_by

  1. 如果使用正则表达式找到数字的整数值,name[/\d+/].to_i
  2. 如果没有数字或相同数字,则命名name

更强大的是,您可以按数字分割整个字符串,并将每个字符串转换为int:

> "abc123def456gh".split(/(\d+)/).map{ |e| Integer(e) rescue e}
=> ["abc", 123, "def", 456, "gh"]

因此,您的自然排序变为:

arr.sort_by{ |s| s.split(/(\d+)/).map{ |e| Integer(e) rescue e}}

因此,现在可以正确处理名称和数字(甚至是名称和数字的倍数):

> arr = ["file1.txt", "file11.txt", "file12.txt", "file2.txt", "file3.txt", "gfile10.txt", "gfile1.txt", "gfile.txt", "file.txt", "afile.txt","afile10.txt","afile2.txt" ]
> arr.sort_by{ |s| s.split(/(\d+)/).map{ |e| Integer(e) rescue e}}
=> ["afile2.txt", "afile10.txt", "afile.txt", "file1.txt", "file2.txt", "file3.txt", "file11.txt", "file12.txt", "file.txt", "gfile1.txt", "gfile10.txt", "gfile.txt"]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据python中的文件名对文件进行排序

C ++在目录中对文件名进行排序

如何以文件名中包含的整数的升序对文件进行排序

如何对文件名中的空格进行排序并连接文件?

如何按文件名中的日期对文件排序?

Bash:根据文件名对文件进行排序

仅给定文件名,如何按时间对文件列表进行排序

如何按文件名对文件路径列表进行排序?

需要帮助根据文件名中的日期戳对文件列表进行排序

根据文件名中嵌入的时间戳对文件进行排序、分组和处理

按数字值对文件名进行排序

如何在BASH中对文件行进行排序

如何在jQuery DataTables中对文件大小进行排序

如何使用python按特定顺序对文件名进行排序

如何按数字顺序和修改的时间顺序对文件名进行排序?

如何使用Go编程语言对文件名进行排序?

如何按数字而不是字母顺序对文件名集合进行排序?

在PHP中对文件名进行排序,例如abc 1.1,abc 1.1.1,abc 1.0

如何在Windows命令提示符下对文件名列表进行排序?

根据文件大小以及打印文件名和大小对文件(包括子目录中的文件)进行排序

如何根据Java中多个路径的文件名对文件进行分组

如何在Unix中对文件排序

命令行按文件名或目录名对文件或目录进行排序

如何在单个目录中查找子目录中的文件并按文件名对它们进行排序?

如何考虑文件名对文件名进行重命名

根据文件名与文件夹Python匹配对文件进行排序

对文件名进行 SQL 修剪

Powershell,按文件名末尾的版本号对文件列表进行排序?

根据文件名中间的版本号对文件进行排序