Есть ли обратное / дополнение IEnumerable.SelectMany
?То есть, есть ли метод вида IEnumerable<T>.InverseSelectMany(Func<IEnumerable<T>,T>)
, который найдет последовательность во входной последовательности и выполнит преобразование в один элемент, а затем снова выровняет все это?
Например, если выхотел заменить все escape-последовательности { 0x7E, 0x7E }
в кадре HDLC только одним байтом 0x7E
, вы могли бы сделать что-то вроде
byte[] byteArray = new byte[] { 0x01, 0x02, 0x7E, 0x7E, 0x04 }; // etc.
byte[] escapeSequence = new byte[] { 0x7E, 0x7E };
byte[] outputBytes = byteArray.InverseSelectMany<byte,byte>(x =>
{
if (x.SequenceEqual(escapeSequence))
{
return new List<byte> { 0x7E };
{
else
{
return x;
}
});
Имеет ли это какой-то смысл или я что-то упускаю здесь критическое?