Question

Comment index dans l'exemple ci-dessous obtenir sa valeur? Je comprends que n est obtenu automatiquement à partir du numbers source, mais, alors que le sens est clair, je ne vois pas comment l'indice est donné sa valeur:

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var firstSmallNumbers = numbers.TakeWhile((n, index) => n >= index);

La signature de TakeWhile est:

public static IEnumerable<TSource> TakeWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);
Était-ce utile?

La solution

Cette version de TakeWhile fournit l'index de l'élément de source dans la séquence en tant que second paramètre au prédicat. C'est à dire. le prédicat est appelé en tant que prédicat (5, 0), puis prédicat (4, 1), prédicat (1, 2), prédicat (3, 3), etc. Voir la documentation MSDN .

Il y a aussi une version « simple » de la fonction, ne fournissant que les valeurs de la séquence, voir MSDN .

Autres conseils

L'indice est généré par la mise en œuvre de TakeWhile, ce qui pourrait paraître un peu comme cette .

Les choses deviennent claires aussi longtemps que vous avez compris comment TakeWhile peut être mis en œuvre:

public static IEnumerable<TSource> TakeWhile<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate)
{
    int index = 0;
    foreach (TSource item in source)
    {
        if (predicate(item, index))
        {
            yield return item;
        }
        else
        {
            yield break;
        }
        index++;
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top