Если у вас есть Rx в качестве зависимости, вы можете сделать:
strings
.BufferWithCount(2)
.ToDictionary(
buffer => buffer.First(), // key selector
buffer => buffer.Last()); // value selector
BufferWithCount(int count)
берет первые count
значения из входной последовательности и выдает их в виде списка, затем принимает следующие count
значения и так далее. То есть из вашей входной последовательности вы получите пары в виде списков: {"^BI", "connectORCL"}, {"^CR", "connectCR"}
, ToDictionary
затем берет первый элемент списка в качестве ключа и последний (== секунда для списков из двух элементов) в качестве значения.
Однако, если вы не используете Rx, вы можете использовать эту реализацию BufferWithCount
:
static class EnumerableX
{
public static IEnumerable<IList<T>> BufferWithCount<T>(this IEnumerable<T> source, int count)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
if (count <= 0)
{
throw new ArgumentOutOfRangeException("count");
}
var buffer = new List<T>();
foreach (var t in source)
{
buffer.Add(t);
if (buffer.Count == count)
{
yield return buffer;
buffer = new List<T>();
}
}
if (buffer.Count > 0)
{
yield return buffer;
}
}
}