c# - 如何对列表列表进行排序?

标签 c# list linq

我有一个要排序的列表列表。

    foreach (var Row in Result)
    {
        foreach (var RowAll in Row.All)
        {
            DataObject.Add(new List<string>() { RowAll.Value1, RowAll.Value2, RowAll.Value3});
            break; 
        }
    }
现在我想按每个子列表的 Value2 对父列表进行排序。
这可能吗?如果是这样,我该怎么做?

最佳答案

您可以通过 LINQ 执行此操作:

 // I'm assuming here that "LastCheckin" is defined as List<List<string>> or similar
 // ...

 var sorted = Data.LastCheckin.OrderBy(list => list[1]);

这将返回 IEnumerable<List<string>>包含按子列表中的第二个值 (Value2) 排序的“列表”。

如果你想对列表进行排序,你可以使用 List<T>.Sort 反而:
 Data.LastCheckin.Sort( (a,b) => a[1].CompareTo(b[1]) );

如果您需要在运行时指定升序或降序,一个简单的处理方法是:
 bool ascending = true; // Set to false for decending

 int mult = ascending ? 1 : -1;
 Data.LastCheckin.Sort( (a,b) => mult * a[1].CompareTo(b[1]) );

为了处理更复杂的检查,您可以将 lambda 拆分为多行:
 bool ascending = true; // Set to false for decending
 string myDateFormat = GetDateFormat(); // Specify date format

 int mult = ascending ? 1 : -1;
 Data.LastCheckin.Sort( (aStr,bStr) => 
    {
        DateTime a, b;
        bool aSuccess = DateTime.TryParseExact(aStr[1], myDateFormat, DateTimeStyles.None, CultureInfo.InvariantCulture, out a);
        bool bSuccess = DateTime.TryParseExact(bStr[1], myDateFormat, DateTimeStyles.None, CultureInfo.InvariantCulture, out b);

        int result;
        if (!aSuccess)
            result = bSuccess ? -1 : 0;
        else if (!bSuccess)
            result = 1;
        else
            result = a.CompareTo(b);

        return mult * result;

    });

这会处理 a 和 b 上的解析器失败,并将它们放在排序的末尾。

关于c# - 如何对列表列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3104042/

相关文章:

c# - 如何从代码隐藏向 ASP.NET UserControl 添加 CSS 样式?

c# - 将数据从 AuthorizeCore 传递到 HandleUnauthorizedRequest,然后传递到 ASP.NET MVC4 中的 Action

c# - 如何为多个类似控件编写事件处理程序?

python - 如果其中一个值在两个字典中都匹配,则用另一个字典值更新一个大字典的最快方法是什么?

list - ListView 中一次只显示一个项目

linq - 错误 LINQ 表达式包含对与不同上下文关联的查询的引用

c# - 从 C# 中的存储过程捕获错误

c# - 如何在 IronPython 中调用 C#/.NET 命名空间?

python - 删除包含多个条件的列表条目

c# - 具有空外键的 EF 导航属性