0

我有一些格式为:

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文件,然后过滤掉最后 2 个部分,因此只存在名称,例如"blur", "soften", "median",等等。

一些着色器效果可以有或多或少的类型,所以我不想硬编码.static.shadereffect

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

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

如何用尽可能少的代码最优雅地做到这一点?性能并不重要。

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

4

2 回答 2

3

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

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

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

    files
    .Select( filename => new string( filename.TakeWhile( c => c != '.' ).ToArray() ) )
    .Distinct()
于 2011-03-15T22:40:11.107 回答
1

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

files
    .Select( s=> 
      {
         int dot1=s.LastIndexOf(".");
         int dot2=s.LastIndexOf(".",dot1-1);
         s.SubString(0,dot2-1);
      }
     )
    .Distinct()
于 2011-03-15T23:11:03.067 回答