如何对字符串列表进行排序

时间:2016-07-27 05:50:39

标签: c# linq list sorting

我有一个字符串列表

List<string> l1 = new List<string>();
l1.Add("i");
l1.Add("k");

List<string> l2 = new List<string>();
l2.Add("f");
l2.Add("a");

pChain = new List<List<string>>();
pChain.Add(l1);
pChain.Add(l2);
...

我想根据每个列表的第一项排序pChain(结果应为l2,l1)。

我尝试了pChain.Sort();,但发生了异常

  

未处理的类型&#39; System.InvalidOperationException&#39;   发生在mscorlib.dll

     

其他信息:无法比较数组中的两个元素。

2 个答案:

答案 0 :(得分:11)

<table border="3" width="400" height="200"> <tr> <td height="40" rowspan="2">1.1</td> <td>1.2</td> </tr> <tr> <td rowspan="2">2.2</td> </tr> <tr> <td>3.1</td> </tr> <tr> <td colspan="2">4.1</td> </tr> <table>的默认调用无法预测您要按第一个元素排序,您需要明确指定:

pChain.Sort()

或者您可以使用Linq的OrderBy(根据documentation 稳定排序):

pChain.Sort((x, y) => String.Compare(x.FirstOrDefault(), y.FirstOrDefault()));
  

此方法执行稳定排序;也就是说,如果两个键   元素相等,元素的顺序得以保留。在   相反,不稳定的排序不会保留元素的顺序   具有相同的密钥。

答案 1 :(得分:7)

您收到该错误是因为C#无法为您排序pChain项,因为它自己是IEnumerable

您想要按Max项对其进行排序吗?或Count项目?或许多其他

您应提供一些规则供它进行比较,例如IComparable<List<string>>或:

pChain = pChain.OrderBy(item => item.FirstOrDefault());