我想对第一个数组进行排序:
filenames = ["z.pdf", "z.txt", "a.pdf", "z.rf", "a.rf","a.txt", "z.html", "a.html"]
通过以下文件的扩展名数组:
extensions = ["html", "txt", "pdf", "rf"]
使用 sort_by
。但是当我尝试时:
filenames.sort_by { |x| extensions.index x.split('.')[1] }
我得到:
["a.html", "z.html", "z.txt", "a.txt", "a.pdf", "z.pdf", "z.rf", "a.rf"]
扩展名为“txt”和“rf”的文件名未排序。我试图弄清楚 sort_by
如何使用元组进行排序,但一直无法找到 sort_by
的源代码。
如何使用 sort_by
将一个数组按另一个数组排序?
编辑:
结果应该是这样的:
["a.html", "z.html", "a.txt", "z.txt", "a.pdf", "z.pdf", "a.rf", "z.rf"]
最佳答案
按扩展数组的索引排序,然后是文件名:
filenames = ["z.pdf", "z.txt", "a.pdf", "z.rf", "a.rf","a.txt", "z.html", "a.html"]
extensions = ["html", "txt", "pdf", "rf"]
p sorted = filenames.sort_by{|fn| [extensions.index(File.extname(fn)[1..-1]), fn]} #[1..-1] chops off the dot
#=> ["a.html", "z.html", "a.txt", "z.txt", "a.pdf", "z.pdf", "a.rf", "z.rf"]
关于ruby-on-rails - Ruby - 如何使用 sort_by 对一个数组与另一个数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16616757/