C# Language Sens inverse


Exemple

  • Inverse l'ordre des éléments dans une séquence.
  • S'il n'y a pas d'éléments lève une ArgumentNullException: source is null.

Exemple:

// Create an array.
int[] array = { 1, 2, 3, 4 };                         //Output:
// Call reverse extension method on the array.        //4
var reverse = array.Reverse();                        //3
// Write contents of array to screen.                 //2
foreach (int value in reverse)                        //1
    Console.WriteLine(value);

Exemple de code en direct

Rappelez-vous que Reverse() peut fonctionner différemment en fonction de l'ordre des chaînes de vos déclarations LINQ.

        //Create List of chars
        List<int> integerlist = new List<int>() { 1, 2, 3, 4, 5, 6 };

        //Reversing the list then taking the two first elements
        IEnumerable<int> reverseFirst = integerlist.Reverse<int>().Take(2);
        
        //Taking 2 elements and then reversing only thos two
        IEnumerable<int> reverseLast = integerlist.Take(2).Reverse();
        
        //reverseFirst output: 6, 5
        //reverseLast output:  2, 1

Exemple de code en direct

Reverse () fonctionne en tamponnant tout, puis marche en arrière, ce qui n'est pas très efficace, mais OrderBy ne l'est pas non plus.

Dans LINQ-to-Objects, il existe des opérations de mise en mémoire tampon (Reverse, OrderBy, GroupBy, etc.) et des opérations sans mise en mémoire tampon (Where, Take, Skip, etc.).

Exemple: extension inversée non tampon

public static IEnumerable<T> Reverse<T>(this IList<T> list) {
    for (int i = list.Count - 1; i >= 0; i--) 
        yield return list[i];
}

Exemple de code en direct

Cette méthode peut rencontrer des problèmes si vous modifiez la liste pendant une itération.