Вы можете использовать Linq's GroupBy()
:
var splitted = listOfStrings.GroupBy(s => Char.IsLetter(s[0]));
А с вашим predicate
это будет:
Func<string, bool> predicate;
var splitted = listOfStrings.GroupBy(predicate);
Использование:
Самый простой способ - преобразовать сгруппированные данные в Dictionary<bool, IEnumerable<string>>
, когда ключом является bool
, обозначающим, начинаются ли элементы в нем с буквы:
var splitted = list.GroupBy(x => Char.IsLetter(x[0]))
.ToDictionary(x => x.Key, z => z.ToArray());
var startWithLetter = splitted[true];
var dontStartWithLetter = splitted[false];
Конечно, есть много способов втиснуть данные в желаемую структуру, но, на мой взгляд, вышесказанное довольно лаконично.
См. MSDN