ruby-on-rails - Ruby - 如何使用 sort_by 对一个数组与另一个数组进行排序?

标签 ruby-on-rails ruby ruby-on-rails-3

我想对第一个数组进行排序:

 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/

相关文章:

ruby-on-rails - 如何为rails中的新表单设置文本字段的默认值?我正在使用 :value => "0". 但在编辑表单中我也得到 '0' 值

ruby-on-rails - 每次运行测试时,Rspec 和 Capybara 都会抛出不一致的 Postgresql 错误

ruby-on-rails - 无法访问使用 Capistrano 和 RVM 部署在乘客上的应用程序的 Rails 控制台

ruby-on-rails - rails : Why shouldn't I directly make changes directly in schema than do migrate

ruby-on-rails - button_to 与 :remote=>true doesn't update the vote count on my page

javascript - rails : Include Javascript_include_tag outside default folders

ruby - 在 Ruby 对象类中创建数组

ruby - Heroku,设计 : Getting 'NoMethodError (undefined method ` to_key' for :user:Symbol)'

javascript - jQuery 自动完成不显示所有匹配项

ruby-on-rails - 没有参数的 request.fullpath