如何在给定排序方法或 lambda 的情况下对列表进行排序?
How do I sort a List given an ordering method or lambda?
如果我有一个方法或 lambda 来排序 List<T>
例如使用宇宙飞船运算符(来自 the documentation:x <=> y
- 如果 x < y,结果为负,如果 x == y,则结果为零,如果 x > y,则结果为正),如何使用该方法对列表进行排序?
List<T>
上有一个 Sort(Comparison<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);
}
}
}
}
您可以分配 lambda 或将 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);
}
}
}
}
如果我有一个方法或 lambda 来排序 List<T>
例如使用宇宙飞船运算符(来自 the documentation:x <=> y
- 如果 x < y,结果为负,如果 x == y,则结果为零,如果 x > y,则结果为正),如何使用该方法对列表进行排序?
List<T>
上有一个 Sort(Comparison<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);
}
}
}
}
您可以分配 lambda 或将 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);
}
}
}
}