匹配Array#reject中的多个条件

时间:2018-06-03 10:30:01

标签: arrays ruby

我有一个目录。我想选择没有.mp3扩展名的所有文件(但没有目录)。这有效:

Dir.glob("#{dir}/**/*").reject { |f| File.directory?(f) }.reject { |f| File.extname(f) == '.mp3' }

但如果可能的话,我想一下子就这样做。我尝试了以下内容:

Dir.glob("#{dir}/**/*").reject { |f| File.file?(f) && File.extname(f) == '.mp3' }

但它不起作用。它确实忽略了非.mp3文件,但它仍然包含目录。

1 个答案:

答案 0 :(得分:2)

您要拒绝目录具有mp4扩展名的所有文件。就这样写:

Dir.glob("#{dir}/**/*")
   .reject { |f| File.directory?(f) || File.extname(f) == '.mp3' }

或者您可能想要否定条件并使用select代替。选择文件没有mp3扩展名的所有内容:

Dir.glob("#{dir}/**/*")
   .select { |f| File.file?(f) && File.extname(f) != '.mp3' }