我正在尝试按其中一个字段排序列表。
我在一个分组列表中有两个列表。第一个包含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]。
我希望我很清楚。 提前谢谢。
答案 0 :(得分:0)
我并不知道你在做什么。但我会猜测:
// 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,所以检查拼写错误;))