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

Ahm*_*mad 2 c# linq sorting list

我有一个字符串列表列表

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);
...
Run Code Online (Sandbox Code Playgroud)

我想pChain根据每个列表的第一项进行排序(结果应该是l2,l1).

我试过pChain.Sort();但发生异常

mscorlib.dll中发生了未处理的"System.InvalidOperationException"类型异常

附加信息:无法比较阵列中的两个元素.

Zei*_*kki 11

默认调用pChain.Sort()无法预测您要按第一个元素排序,您需要明确指定:

pChain.Sort((x, y) => String.Compare(x.FirstOrDefault(), y.FirstOrDefault()));
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用Linq的OrderBy(根据文档,这是一种稳定的排序):

pChain = pChain.OrderBy( x => x.FirstOrDefault()).ToList();
Run Code Online (Sandbox Code Playgroud)

该方法执行稳定的排序; 也就是说,如果两个元素的键相等,则保留元素的顺序.相反,不稳定的排序不会保留具有相同键的元素的顺序.


Gil*_*een 7

你得到那个错误,因为C#不知道如何pChain为你排序一个项目,因为它是一个IEnumerable属于你自己的项目.

你想要按Max项目排序吗?或者通过Count物品?或许多其他物品

你应该为它提供一些规则来比较,IComparable<List<string>>或者:

pChain = pChain.OrderBy(item => item.FirstOrDefault());
Run Code Online (Sandbox Code Playgroud)