c# - 列表自定义排序

标签 c# sorting

我想根据特定条件对自定义列表进行排序。我的列表中的每个项目都包含一个名为“Status”的属性,它是一个枚举,如下所示。

 Empty = 0, Normal = 1, Aged = 2, Dead = 3 

上面指定的值无法更改。当我对“状态”属性进行排序时,我希望顺序为“正常”、“老化”、“空”和“死亡”。我不知道如何最好地解决这个问题?

下面是我用于解决不同排序问题的类的示例。不确定如何“转换”此类来解决上述问题?

public class SortOrders : IComparer<OrderBlocks.Order>
{
    private bool _sortDescending;

    public SortOrders(bool sortDescending)
    {
        this._sortDescending = sortDescending;
    }

    public SortOrders()
        : this(false)  // sort ascending by default
    {

    }

    public int Compare(OrderBlocks.Order x, OrderBlocks.Order y)
    {
        if (this._sortDescending)
        {
            return y.StatusGood.CompareTo(x.StatusGood);
        }
        else
        {
            return x.StatusGood.CompareTo(y.StatusGood);
        }
    }
}

最佳答案

这是我使用 Linq 的方法:

        var sorted = myList.OrderBy(x =>
                                    {
                                        switch (x.Status)
                                        {
                                            case SomethingStatus.Normal:
                                                return 0;
                                            case SomethingStatus.Aged:
                                                return 1;
                                            case SomethingStatus.Empty:
                                                return 2;
                                            case SomethingStatus.Dead:
                                                return 3;
                                            default:
                                                return 10;
                                        }
                                    });

关于c# - 列表自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20678671/

相关文章:

Python tkinter : Sorting the contents of an OptionMenu widget

algorithm - 有效的函数排序

javascript - 根据定义的顺序对数组进行排序

c# - 使用正则表达式在一组单词之后立即查找单词的正则表达式

c# - 高级 C# 字符串比较

c# - c# 正则表达式中命名捕获的问题

c# - 更新 MongoDB 集合中的条目

c# - 在执行过程中修改 C# Class 方法

bash - 按深度排序文件 (bash)

c# - 为什么我的 OrderBy 使用这个比较器永远运行?