Paire d'itération en C# ou fenêtre coulissante de l'agent recenseur

Si j'ai un IEnumerable comme:

string[] items = new string[] { "a", "b", "c", "d" };

Je voudrais en boucle par toutes les paires d'éléments consécutifs (fenêtre glissante de taille 2). Ce qui serait

("a","b"), ("b", "c"), ("c", "d")

Ma solution était est-ce

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

 //used like this :
 foreach (Pair<String,String> pair in IterTools<String>.Pairs(items)) {
    System.Out.PrintLine("{0}, {1}", pair.First, pair.Second)
 }

Quand j'ai écrit ce code, je me demandais s'il existe déjà des fonctions dans l' .NET framework qui font la même chose et il n'est pas juste pour les paires, mais pour n'importe quel taille des n-uplets.
À mon humble avis, il devrait y avoir une façon agréable de faire ce genre de fenêtre coulissante opérations.

J'utilise C# 2.0 et je peux imaginer qu'avec C# 3.0 (w/LINQ) il n'y a plus (et plus agréable) façons de le faire, mais je suis principalement intéressé en C# 2.0 solutions. Cependant, j'apprécie aussi de C# 3.0 solutions.

InformationsquelleAutor f3lix | 2009-02-23