Попарная итерация в C# или перечислитель скользящего окнаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Попарная итерация в C# или перечислитель скользящего окна

Сообщение Anonymous »

Если у меня есть IEnumerable, например:

Код: Выделить всё

string[] items = new string[] { "a", "b", "c", "d" };
Я хотел бы просмотреть все пары последовательных элементов (скользящее окно размера 2). Это было бы

Код: Выделить всё

("a", "b"), ("b", "c"), ("c", "d")
Мое решение было следующим:

Код: Выделить всё

    public static IEnumerable
> Pairs(IEnumerable enumerable) {
IEnumerator e = enumerable.GetEnumerator(); e.MoveNext();
T current = e.Current;
while ( e.MoveNext() ) {
T next = e.Current;
yield return new Pair(current, next);
current = next;
}
}

// used like this :
foreach (Pair pair in IterTools.Pairs(items)) {
System.Out.PrintLine("{0}, {1}", pair.First, pair.Second)
}
Когда я писал этот код, мне было интересно, есть ли уже в .NET Framework функции, которые делают то же самое, причем не только для пар, но и для кортежей любого размера.
ИМХО, должен быть хороший способ выполнять подобные операции со скользящим окном.
Я использую C# 2.0 и могу себе представить, что с C# 3.0 (с использованием LINQ) есть больше и более приятные способы сделать это, но меня в первую очередь интересуют решения C# 2.0. Хотя я также буду признателен за решения на C# 3.0.

Подробнее здесь: https://stackoverflow.com/questions/577 ... enumerator
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»