为了提高效率i
(不区分大小写,我想)选项,我建议你创建一个包含所需的文件扩展名集。确定一个集合是否包含一个给定的元素需要与确定一个散列是否具有给定的关键字大致相同的时间。它比单步执行数组要快得多。
require 'set'
BAD_EXT = %w| mxf mov mp4 3g2 3gp asf avi f4v flv m4v m2ts mkv
mpeg mpg mpv mts ogv svi vob webm wmv wav mp3 |.to_set
#=> #<Set: {"mxf", "mov", "mp4", "3g2", "3gp", "asf", "avi", "f4v",
# "flv", "m4v", "m2ts", "mkv", "mpeg", "mpg", "mpv", "mts",
# "ogv", "svi", "vob", "webm", "wmv", "wav", "mp3"}>
fnames = ["./Ruby/Cat.mov", "./Ruby/Dog.woof", "./Ruby/pig"]
fnames.select { |fname| BAD_EXT.include?(File.extname(fname).downcase.sub(/\A\./, "")) }
#=> ["./Ruby/Cat.mov"]
请参阅File::extname。
注:
File.extname("abc.def")
#=> ".def"
File.extname("abc")
#=> ""
因此,有必要去除期间如果存在的话(...sub(/\A\./, "")
)。
OP显然想要select
这些扩展名的文件。见下面的评论。
如果你得到'mov.jpeg',会发生什么?使用'File.extname'来提取扩展名,使用它来进行简单的数组包含测试不是更好吗? –
告诉我你的意思,我会尝试。并不是所有的东西都可以在我的Ruby应用中运行 – HelixHatter
请看下面Cary的回答,这几乎是我想到的。 –