Совпадение нескольких условий в массиве - PullRequest
0 голосов
/ 03 июня 2018

У меня есть каталог.Я хочу выбрать все файлы (но без каталогов), которые не имеют расширения .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 голосов
/ 03 июня 2018

Вы хотите отклонить все файлы, которые являются каталогом или с расширением 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' }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...