指定したディレクトリ以下から再帰的にファイルをランダムに取ってくる


 
へー、Ruby ではどうやるかなとちょっと考えてみた。

require 'find'

def get_filenames_randomly(directory)
  Find.find(directory).select {|x| File.file?(x)}.shuffle.to_enum
end

puts get_filenames_randomly("/usr/lib").take(10)

こんな感じ? Ruby だから Enumerator を返すことにする。実質一行だな。

結果。

/usr/lib/python2.7/dist-packages/twisted/protocols/portforward.py
/usr/lib/x86_64-linux-gnu/libgtk-3.so
/usr/lib/python2.7/dist-packages/reportlab/lib/enums.py
/usr/lib/x86_64-linux-gnu/libicule.so.55.1
/usr/lib/ruby/2.3.0/rdoc/markup/attributes.rb
/usr/lib/x86_64-linux-gnu/vlc/plugins/codec/libsvcdsub_plugin.so
/usr/lib/python2.7/dist-packages/twisted/protocols/mice/__init__.pyc
/usr/lib/x86_64-linux-gnu/wine/dbghelp.dll.so
/usr/lib/python3.5/lib2to3/pgen2/__pycache__/parse.cpython-35.pyc
/usr/lib/python2.7/dist-packages/dbus/service.pyc

 
ちなみに

enum = get_filenames_randomly("/usr/lib")
10.times {puts enum.next}

でもほぼ同じ。(10回に満たない場合の挙動がちがう。)