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