我有一个字符串列表
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
其他信息:无法比较数组中的两个元素。
答案 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());