Как отсортировать список с учетом метода упорядочения или лямбда-выражения?

Если у меня есть метод или лямбда для сортировки List<T>например, с помощью оператора космического корабля (Из документации:x <=> y - результаты отрицательные, если x y), как я могу отсортировать список с помощью этого метода?

E сть Sort(Comparison<T>) метод на List<T> но в документации не объясняется, как его использовать.

Например, предположим, что я хочу отсортировать список строк по их длине, сначала в порядке возрастания, затем в порядке убывания, используя метод и лямбда:

using System;
using System.Collections.Generic;

namespace test
{
    class Program
    {
        public static int ascendingMethod (String lhs, String rhs)
        {
            return lhs.Length <=> rhs.Length;
        }

        public static void Main()
        {
            function int(String lhs, String rhs) descendingLambda = (lhs, rhs) => 
                    rhs.Length <=> lhs.Length;

            let list = scope List<String>();
            list.Add("2Foobar");
            list.Add("1Fooba");
            list.Add("3Foob");

            //sort using Descending lamdba
            for(let s in list)
            {
                Console.WriteLine(s);
            }

            // sort using Ascending method
            for(let s in list)
            {
                Console.WriteLine(s);
            }
        }
    }
}

1 ответ

Решение

Вы можете назначить лямбду или привязать Comparison<T> к методу, затем используйте List<T>.Sort(Comparison<T>).

в String Например, это могло бы выглядеть так:

using System;
using System.Collections.Generic;

namespace test
{
    class Program
    {  
        public static int ascendingMethod (String lhs, String rhs)
        {
            return lhs.Length <=> rhs.Length;
        }

        public static void Main()
        {
            Comparison<String> descendingLambdaComparison = scope (lhs, rhs) => 
                    rhs.Length <=> lhs.Length;
            Comparison<String> ascendingMethodComparison = scope => ascendingMethod;

            let list = scope List<String>();
            list.Add("2Foobar");
            list.Add("1Fooba");
            list.Add("3Foob");

            list.Sort(descendingLambdaComparison);
            for(let s in list)
            {
                Console.WriteLine(s);
            }

            list.Sort(ascendingMethodComparison);
            for(let s in list)
            {
                Console.WriteLine(s);
            }
        }
    }
}
Другие вопросы по тегам