gpt4 book ai didi

c# - 按降序自然排序字符串列表 C#

转载 作者:太空宇宙 更新时间:2023-11-03 22:38:38 25 4
gpt4 key购买 nike

请问如何对一个List<string>进行排序使用 Natural Sort Comparer 降序排列图书馆。

我想问一下你们有没有人用过这个库 https://www.codeproject.com/Articles/22517/Natural-Sort-ComparerList<string> 进行排序?

这是升序的代码片段

public List<string> contents = new List<string>{ "a,b,c,d,e,f" };
public void sorting()
{
using (NaturalSortComparer comparer = new NaturalSortComparer())
{
contents.Sort(comparer);
}
}

我能够让它按升序排序,但不是降序

有什么想法吗?

最佳答案

让我们实现一个简单的扩展方法:

  public static partial class ComparerExtensions {
public static IComparer<T> Reverse<T>(this IComparer<T> comparer) {
if (null == comparer)
throw new ArgumentNullException(nameof(comparer));

return Comparer<T>.Create((left, right) => comparer.Compare(right, left));
}
}

然后你可以反转任何你喜欢的比较器(ICompare<T>):

 MyList.Sort(YourCustomComparer.Reverse());

在你的情况下(比较器实现有点奇怪 IDisposable ):

 using (var naturalComparer = new NaturalComparer()) {
contents.Sort(naturalComparer.Reverse());
}

编辑:如果是 C# 4.0 或更早版本(没有 Comparer<T>.Create),我们可以像这样实现扩展方法:

  public static partial class ComparerExtensions {
private sealed class ReversedComparer<T> : IComparer<T> {
private readonly IComparer<T> m_Comparer;

public ReversedComparer(IComparer<T> comparer) {
m_Comparer = comparer;
}

public int Compare(T x, T y) {
return m_Comparer.Compare(y, x);
}
}

public static IComparer<T> Reverse<T>(this IComparer<T> comparer) {
if (null == comparer)
throw new ArgumentNullException(nameof(comparer));

return new ReversedComparer<T>(comparer);
}
}

关于c# - 按降序自然排序字符串列表 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53611279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com