如何让这些文件尽可能优雅?

时间:2011-03-15 22:35:00

标签: c# .net getfiles

我有一些形式的文件:

blur.static.shadereffect
blur.dynamic.shadereffect
blur.virtual.shadereffect

soften.static.shadereffect
soften.dynamic.shadereffect
soften.virtual.shadereffect

median.static.shadereffect
median.dynamic.shadereffect
median.virtual.shadereffect

...

现在我收到.static.shadereffect个文件,然后过滤掉最后两个部分,只有名称存在,如"blur", "soften", "median"等。

某些着色器效果可以包含更多或更少的类型,因此我不想硬编码.static.shadereffect

所以最后该方法将返回.shadereffect文件的名称:

{"blur", "soften", "median"}

如何使用尽可能少的代码最优雅地完成此操作?表现并不重要。

编辑:一个小细节。文件名也可以有两个以上的点,所以像“blur.sharpen.dynamic.shadereffect”这样的东西,不应该抛弃结果。

2 个答案:

答案 0 :(得分:3)

我只会对每个文件名使用string.Split,然后使用Distinct

    files
    .Select( filename => filename.Split( '.' )[0] )
    .Distinct()

虽然,我必须承认,这可能不是最有效的方式。如果你有很多点的长名称,这将浪费一些记忆和时间。更好的方法是将字符串的一部分明确地带到第一个点:

    files
    .Select( filename => new string( filename.TakeWhile( c => c != '.' ).ToArray() ) )
    .Distinct()

答案 1 :(得分:1)

我没有对它进行测试,所以某处可能会有一些错误的错误。但是这应该选择除了每个字符串的最后两个部分之外的所有内容。

files
    .Select( s=> 
      {
         int dot1=s.LastIndexOf(".");
         int dot2=s.LastIndexOf(".",dot1-1);
         s.SubString(0,dot2-1);
      }
     )
    .Distinct()