나는 FileList
에 *.js
과 *.tc
개의 확장자가 있습니다. FileList
의 두 배열로 분할하는 방법은 하나는 *.js
파일이고 다른 하나는 *.tc
파일입니까? 상사와 그룹 배열 구성원에루비 파일 목록 필터링
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"] }
을 설치해야 파일을 포함하는 두 배열 (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