Как сделать эти файлы максимально элегантными? - PullRequest
0 голосов
/ 16 марта 2011

У меня есть несколько файлов в виде:

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», которое не должно сбрасывать результаты.

Ответы [ 2 ]

3 голосов
/ 16 марта 2011

Я бы просто использовал string.Split для каждого имени файла, а затем Distinct:

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

Хотя, должен признать, это может быть не самым эффективным способом. Если у вас длинные имена с множеством точек, это приведет к потере памяти и времени. Лучшим способом было бы явно взять часть строки до первой точки:

    files
    .Select( filename => new string( filename.TakeWhile( c => c != '.' ).ToArray() ) )
    .Distinct()
1 голос
/ 16 марта 2011

Я не тестировал его, поэтому где-то может быть какая-то ошибка. Но для этого следует выбрать все, кроме двух последних частей каждой строки.

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