0

如果我有一个方法或 lambda 来对List<T>例如使用 spaceship 运算符进行排序(来自文档x <=> y-如果 x < y,结果为负,如果 x == y,则结果为零,如果 x > y,则为正),我如何使用那个方法?

有一个Sort(Comparison<T>)方法,List<T>但文档没有解释如何使用它。

例如,假设我想按字符串的长度对字符串列表进行排序,首先是升序,然后是使用方法和 lambda 的降序:

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);
            }
        }
    }
}
4

1 回答 1

0

您可以分配 lambda 或将 a 绑定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);
            }
        }
    }
}
于 2020-01-20T09:27:36.273 回答