私はFileList
に*.js
と*.tc
という拡張子があります。 FileList
の2つの配列に分割するにはどうすればよいですか?*.js
個のファイルと*.tc
個のファイルのみを含むものはどれですか?類似点を持つグループのアレイメンバーにRuby FileListフィルタリング
0
A
答えて
3
あなたは、ファイル名の拡張子を取得するためにFile.extname
を使用することができ、かつArray#group_by
:
result = [ "aaa.js", "bbb.js", "ccc.js",
"xxx.tc", "yyy.tc", "zzz.tc" ].group_by { |fname| File.extname(fname) }
=> { ".js" => ["aaa.js", "bbb.js", "ccc.js"],
".tc" => ["xxx.tc", "yyy.tc", "zzz.tc"] }
あなたが持っているファイルを含む2つのアレイ(result[".js"]
とresult[".tc"]
)を含むHash
拡張子に応じて名前を付けます。
1
Enumerable#partition
が救助になります。
["aaa.js", "bbb.js", "ccc.js",
"xxx.tc", "yyy.tc", "zzz.tc" ].partition do |e|
e[/(?<=\.).*\z/] == "tc"
end
#⇒ [["xxx.tc", "yyy.tc", "zzz.tc"],
# ["aaa.js", "bbb.js", "ccc.js"]]
または、より明確:
["aaa.js", "bbb.js", "ccc.js",
"xxx.tc", "yyy.tc", "zzz.tc" ].partition(&/\.tc\z/.method(:=~))
+0
私たちはここでコメントしています:) '.partition {| f | f =〜/ js $ /} 'はわかりやすいようです。 ?end_with?( 'js') 'が読みやすくなります。 – Felix
'.group_by(&File.method(:EXTNAME))'。 – mudasobwa
OPが頼んだもの(実際にはそれが疑わしい)を得るために、 'values'を' group_by'の結果に適用することができます。 – sawa