使用lambda表达式按字段排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用lambda表达式按字段排序相关的知识,希望对你有一定的参考价值。

我试图通过其中一个字段来排序列表。

我在一个分组列表中有两个列表。第一个包含Id,第二个包含计数。我成功地能够按Id对列表进行分组并重新格式化。

for (int i = 0; i < GroupedListofLists.Count; i++)
            {
                tempo_Id.Add(GroupedListofLists[i][0]);
                tempo_count.Add(GroupedListofLists[i][1]);
            }

GroupedListofLists.Clear();
GroupedListofLists.Add(tempo_Id);
GroupedListofLists.Add(tempo_count);

如果我打印出GroupedListofLists,我会有不同的ID(GroupedListofLists [0]),每个ID都在第二个(GroupedListofLists [1])。

现在,当我尝试使用lambda表达式对此列表进行排序时,我遇到了问题。我尝试了这两种方法:

GroupedlistofLists.Sort( (a, b) =>  Convert.ToDouble(a[idx]).CompareTo(Convert.ToDouble(b[idx])));

GroupedlistofLists = GroupedlistofLists.OrderBy(x => Convert.ToDouble(x[idx])).ToList();

出现了一个问题。

在第一种方法中,无论我用于变量'idx'的值是什么,a都将被赋予GroupedListofLists [0]的值,并且b将被赋予GroupedListofLists [1]的值。

在第二个中,无论我使用什么值变量'idx'(0或1),x都将包含GroupedListofLists [0]的值。哪个是Id值,我需要按Count排序它们,所以GroupedListofLists [1]。

我希望我很清楚。先感谢您。

答案

我并不知道你想要做什么。但我会猜测:

// Build some List you want to sort
List<string> myList = new List<string>() { "3", "1", "2" };
// Sort the List
myList = myList.OrderBy(a => Convert.ToDouble(a));

OrderBy中的Lambda-Expression需要选择一个以默认方式排序的值。 Lambda-Expression将针对列表中的每个项目运行。结果将用作订单键。你不需要任何索引。可以使用排序以对复杂类型进行排序。

更好的版本应该在具有正确类和类型的List上工作。应避免在lambda表达式内转换!

// Some example-class with multiple properties
public class MyItem
{
    public string Name { get; set; }
    public double Value { get; set; }
}

// Some test-data
List<MyItem> myList = new List<MyItem>()
{
    new MyItem() { Name = "One", Value = 1 },
    new MyItem() { Name = "Three", Value = 3 },
    new MyItem() { Name = "Two", Value = 2 }
}

// select the value you want to use for ordering the list.
myList = myList.OrderBy(item => item.Value);

// Expected output: 1, 2, 3
foreach(MyItem item in myList)
{
    Console.WriteLine(item.Value + ", " + item.Name);
}

// Expected output: 3, 2, 1
myList = myList.OrderBy(item => item.Name);

foreach(MyItem item in myList)
{
    Console.WriteLine(item.Value + ", " + item.Name);
}

(我没有安装Visual Studio,所以检查拼写错误;))

以上是关于使用lambda表达式按字段排序的主要内容,如果未能解决你的问题,请参考以下文章

流和 Lambda 表达式按降序排序 [重复]

Java lambda date排序

用lambda表达式按照结构体中的一个字段来排序一个结构体数组

Lambda表达式的应用

使用带有实体框架的动态字段按子记录排序

lambda表达式在解决java后台分组排序时的应用