Ruby FileList过滤

时间:2017-11-16 03:48:41

标签: ruby-on-rails ruby filelist

我有@Nullable private Activity getActivity() { Activity currentActivity = null; Collection resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(RESUMED); if (resumedActivities.iterator().hasNext()){ currentActivity = (Activity) resumedActivities.iterator().next(); } return currentActivity; } FileList*.js个扩展名。如何将其拆分为两个*.tc数组,一个仅包含FileList个文件,另一个包含*.js个文件?

2 个答案:

答案 0 :(得分:4)

您可以使用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"] }

现在您有一个Hash包含两个数组(result[".js"]result[".tc"]),这些数组根据其扩展名包含文件名。

答案 1 :(得分:2)

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(:=~))